网络通信-TCP/UDP

2019-06-15  本文已影响0人  VitaAin

参考:
https://blog.csdn.net/zhang6223284/article/details/81414149
https://blog.csdn.net/qq_38950316/article/details/81087809
https://www.cnblogs.com/qdhxhz/p/8470997.html

TCP/IP是个协议组,可分为三个层次:网络层、传输层、应用层。
网络层有:IP协议、ICMP协议、ARP协议、RARP协议、BOOTP协议。
传输层有:TCP协议、UDP协议。
应用层有:FTP、HTTP、TELNET、SMTP、DNS等协议。

TCP,UDP,HTTP

一、TCP

包头

TCP包头.jpg

使用TCP协议的连接建立与断开,正常过程下至少需要发送7个包才能完成,就是我们常说的三次握手,四次挥手。

TCP三次握手+四次挥手.png

建立连接:三次握手

一次TCP连接的建立需要三次握手。

TCP三次握手.jpg
为什么需要三次握手,而不是两次?

client发送了第一个连接的请求报文,但是由于网络不好,这个请求没有立即到达服务端,而是在某个网络节点中滞留了,直到某个时间才到达server,本来这已经是一个失效的报文,但是server端接收到这个请求报文后,还是会想client发出确认的报文,表示同意连接。假如不采用三次握手,那么只要server发出确认,新的建立就连接了,但其实这个请求是失效的请求,client是不会理睬server的确认信息,也不会向服务端发送确认的请求,但是server认为新的连接已经建立起来了,并一直等待client发来数据,这样,server的很多资源就没白白浪费掉了,采用三次握手就是为了防止这种情况的发生,server会因为收不到确认的报文,就知道client并没有建立连接。这就是三次握手的作用。

断开连接:四次挥手

TCP四次挥手.jpg

A:B,我不想玩了
B:哦,A你不想玩了啊,我知道了
(此时,只是A不想玩了,即不再发送数据,但B可能还有未发送完的数据,所以需要等待B也主动关闭)
B:A,好吧,我也不玩了,再见
A:好的,再见

为什么需要四次挥手?

关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
可能有人会有疑问,tcp我握手的时候为何ACK(确认)和SYN(建立连接)是一起发送。挥手的时候为什么是分开的时候发送呢?因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭 SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四次挥手。

客户端突然挂掉了怎么办?

正常连接时,客户端突然挂掉了,如果没有措施处理这种情况,那么就会出现客户端和服务器端出现长时期的空闲。解决办法是在服务器端设置保活计时器,每当服务器收到客户端的消息,就将计时器复位。超时时间通常设置为2小时。若服务器超过2小时没收到客户的信息,他就发送探测报文段。若发送了10个探测报文段,每一个相隔75秒,还没有响应就认为客户端出了故障,因而终止该连接。

累计确认

为了保证顺序性,每个包都有一个 ID。在建立连接的时候会商定起始 ID 是什么,然后按照 ID 一个个发送,为了保证不丢包,需要对发送的包都要进行应答,当然,这个应答不是一个一个来的,而是会应答某个之前的 ID,表示都收到了,这种模式成为累计应答或累计确认。

为了记录所有发送的包和接收的包,TCP 需要发送端和接收端分别来缓存这些记录,发送端的缓存里是按照包的 ID 一个个排列,根据处理的情况分成四个部分:1、发送并且确认的;2、发送尚未确认的;3、没有发送等待发送的;4、没有发送并且暂时不会发送的。这里的第三部分和第四部分就属于流量控制的内容。

对于接收端来讲,它的缓存里面的内容要简单一些:1、接收并且确认过的;2、还没接收,但是马上就能接收的;3、还没接收,但也无法接收的。

TCP为什么是可靠连接

二、UDP

包头

UDP包头.jpg

特点

主要应用场景
基于UDP的几个例子

TCP和UDP对比

上一篇 下一篇

猜你喜欢

热点阅读