欢迎大家来到IT世界,在知识的湖畔探索吧!
什么是TCP和UDP协议?
IP是网络层协议,面向无连接,即无需与目的主机建立连接,可以直接发送数据。主要目的就是为了提高数据传输效率,至于目标主机是否收到或数据是否丢失,IP协议并不负责,由上一层传输层进行可靠性控制。
传输层两个重要协议分别是TCP和UDP,传输层并不都是负责可靠性的,具体要看使用哪一种协议。TCP是面向连接的可靠性传输,UDP是非面向连接的不可靠传输。
例如,TCP是一个负责任的快递,将货物送达要等待收件人打开货物并确认签字,而UDP只负责将货物放到家门口,也不会通知你,至于包裹发错、丢失和UDP都没有关系。
端口
在传输层协议中,一定要理解什么是端口,这里的端口是指逻辑上的端口,而非交换机、路由器等物理端口。端口号一共是65536个,编号为0~65535,一般平时编程测试使用1024以后端口,因为0~1023被知名的程序软件占用了,比如常见的SSH是22端口,http网站默认80端口,ftp文件传输为443端口。
为什么要用端口,比如有一个城堡,城堡里面有很多门,不同的门有不同的功能,正门是统治阶级贵族使用,还有普通工作人员的入口,还有垃圾处理的通道,还有秘密逃生通道,不同的通道有不同功能。
对于计算机来说,接收到一个字符串“Hello World!”,那么这个应该是QQ接收还是微信接收,所以发送信息时,还要指定目标主机的端口,我们的数据是发送给哪个服务的。
三次握手建立连接
三次握手是TCP协议,需要和目标服务器通信前建立连接,否则,服务器地址错误或者服务器未开机,直接发送数据就会造成丢失。
比如,我要和小明借钱,但是要先铺垫一下。“小明,你好啊,吃了吗,我有点小事不知当讲不当讲。”,小明很热情,“咱们都是兄弟,有啥不能讲,有困难尽管提!”,“好吧,我这个月工作绩效不好,借我点钱还房贷。”……
这就是三次握手建立连接的过程。
比如,我们是客户机,要给服务器发送数据,比如服务器IP为192.168.1.10,端口是8080。
第一步:SYN为同步位,确认ACK初始为0,seq为传送数据时第一个数据字节序号x。
第二步:服务器应答同步SYN=1,确认ACK=1,确认号ack=x+1,自己的序列seq=y。
第三步:客户机表示我收到了服务器的应答,而后,双方就可以愉快的通信了。
因此,也可以看出TCP协议建立连接的过程导致了效率降低,在很多实时性要求较高的领域,比如实时音视频聊天大多采用UDP协议,即时某个时刻网络较差,导致音频有干扰,视频不清晰,对双方影响都不是很大。要根据实际情况进行协议选择。
四次握手释放连接
一旦数据传输结束,通信双方都可以主动释放连接。
比如,客户端A先要关闭连接:
第一步:发送FIN=1,seq=u,等待服务器B的确认,自己要关闭连接。
第二步:服务器进行确认ACK=1,确认号ack=u+1。自己的报文序号seq=v。
第三步:B也要向A发送FIN表明自己也要关闭,ack=u+1,因为A并没有继续发送数据。
第四步:A要向B发出确认ACK=1。
双方经过2MSL(Maximum Segment Lifetime 报文最大生存时间)后才真正释放连接。
简单来说,男女双方煲电话粥,A说,没什么事我要挂了,B先说,“好的”,对A的信息进行确认,然后再向A发一条消息,“我也要挂了”。然后A要进行确认,“OK,没问题。”,而后,双方静静等待30s,没有人再说话,同时按下关闭键,结束通话。
TCP流量控制和拥塞控制
很多时候,我们都认为数据传输越快越好,然而,如果速度过快,接收方处理不及时就可能会造成信息丢失。因此,TCP通过滑动窗口机制控制流量。TCP采用一个计时器,如果对方发送零窗口通知,TCP就等待一个时间,直至对方有空闲窗口再发送数据。
就像我们养了一条很能吃的松树,我们喂给松树一碗松果,10分钟后查看一下,如果松果没了继续添加满一碗,如果松果没有吃完,证明松树现在不饿,暂时不需要添加新的松果。
拥塞控制就是要考虑现实的网络性能,如果需要传输的信息量特别大,要消耗巨大的网络资源,超出现有网络负载能力。TCP拥塞控制会采用慢启动方式,不要一开始就传递巨量的数据。
相关推荐
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/17436.html