TCP/UDP 学习

2.1 TCP(Transmission Control Protocol,传输控制协议

序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号之后,给每一个报文段指派一个序号;序列号seq就是这个报文段中第一个字节的数据编号。

确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。

确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号字段无效。

同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个请求连接报文段。若同意连接,则在响应报文段中使SYN=1,ACK=1.因此,SYN=1表示这个一个连接请求,或接受连接报文。SYN标志位只有在TCP建立连接时被置为1,握手完成后SYN被置为0。

终止FIN:用来释放一个连接,FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接。

URG:紧急指针是否有效。若为1,表示某一位需要被优先处理。

PSH:提示接收端应用程序立即从TCP缓冲区把数据读走。

RST:对方要求重新建立连接,复位。

PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。

2.1.1 TCP三次握手过程理解:

第一次握手:建立连接时,客户端发送同步syn包(SYN=1,seq=x)到服务器,此时客户端为SYN_SENT状态,等待服务器确认。

第二次握手:服务器收到syn包,确认客户端的SYN,同时自己发送一个同步+确认的SYN+ack包(SYN=1,ack=x+1,ACK=1,seq=y)给客户端,此时服务端为SYN_RECV状态。

第三次握手:客户端收到服务器的SYN+ack包,向服务器发送确认ack包(ack=y+1,ACK=1,seq=x+1),此包发送完毕,客户端与服务器进入ESTABLISHED(TCP连接成功)状态。

2.1.2 TCP四次挥手过程理解:

第一次挥手:客户端发出连接释放报文,并停止发送数据,释放报文首部,FIN=1,seq=u,此时客户端为FIN-WAIT-1(终止等待1)状态。

第二次挥手:服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,seq=v,此时服务端进入CLOSE-WAIT(关闭等待)状态。服务端把未发送的数据继续发送。

   客户端收到确认报文后,进入FIN-WAIT-2(终止等待2)状态,继续接受数据等待服务器发出连接释放报文。

第三次挥手:服务器将数据发送完毕,就向客户端发送连接释放报文,FIN=1,ACK=1,ack=u+1,此时服务器进入了LAST-ACK(最后确认)状态,等待客户端确认。

第四次挥手:客户端收到连接释放报文,发出确认报文,ACK=1,ack=w+1,seq=u+1,此时,客户端进入TIME-WAIT(时间等待)状态,经过2**MSL(最长报文段寿命)时间后,撤销相应的TCB,进入CLOSED状态。服务器收到确认报文后,立即进入CLOSED状态。

2.1.3累计确认

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

为了记录所有发送的包和接收的包,TCP 需要发送端和接收端分别来缓存这些记录,发送端的缓存里是按照包的 ID 一个个排列,根据处理的情况分成四个部分

  • 发送并且确认的
  • 发送尚未确认的
  • 没有发送等待发送的
  • 没有发送并且暂时不会发送的

这里的第三部分和第四部分就属于流量控制的内容

在 TCP 里,接收端会给发送端报一个窗口大小,叫 Advertised window。这个窗口应该等于上面的第二部分加上第三部分,超过这个窗口,接收端做不过来,就不能发送了。

 

对于接收端来讲,它的缓存里面的内容要简单一些

  • 接收并且确认过的
  • 还没接收,但是马上就能接收的
  • 还没接收,但也无法接收的

 

2.2 UDP(User Data Protocol,用户数据报协议)

 UPD的包头比较简单,包含源端口号和目标端口号。有以下特点:

  • 结构简单;
  • 不建立连接,但是监听,谁给他传数据,他就给谁传数据,也可以同时传给多个;
  • 不管网络堵塞与丢包;

     应用场景:直播、实时游戏、物联网

 

(1)TCP和UDP的区别:

  • TCP 是面向连接的,UDP 是面向无连接的
  • UDP程序结构较简单
  • TCP 是面向字节流的,UDP 是基于数据报的
  • TCP 保证数据正确性,UDP 可能丢包
  • TCP 保证数据顺序,UDP 不保证

(2)什么是面向连接,什么是面向无连接?

在互通之前,面向连接的协议会先建立连接,如 TCP 有三次握手,而 UDP 不会

(3)TCP 为什么是可靠连接?

  • 通过 TCP 连接传输的数据无差错,不丢失,不重复,且按顺序到达。
  • TCP 报文头里面的序号能使 TCP 的数据按序到达
  • 报文头里面的确认序号能保证不丢包,累计确认及超时重传机制
  • TCP 拥有流量控制及拥塞控制的机制
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值