TCP和UDP协议

传输层

传输层是为应用进程间提供逻辑通信。

1.1. UDP协议

1.1.1. UDP的主要特点

(1) UDP是无连接的,在传输数据之前不需要建立连接。

(2) UDP是尽最大努力交付的。UDP不提供可靠交付。

(3) UDP是面向数据报的。

(4) UDP支持一对一,一对多,多对一,多对多通信。

(5) UDP不提供拥塞控制。

(6) UDP首部开销小只有8个字节。

 

1.1.2. UDP的首部格式

源端口

目的端口

长度

校验和


源端口:在需要对方回信时选用,不需要时全置0

目的端口:在终点交付时使用

长度:UDP报文的长度(包括首部和数据字段)

校验和:检测用户数据在传输时是否出现错误,出现就丢弃。

 

1.2. TCP协议

1.2.1. TCP的主要特点

(1) TCP是面向连接的,在传输数据之前需要建立连接。

(2) TCP是可靠传输的。

(3) TCP只支持一对一通信。

(4) TCP是面向字节流的。

(5) TCP有拥塞控制

(6) TCP是全双工通信

(7) TCP首部长度是20个字节

1.2.2. TCP的首部格式

源端口号

目的端口号

序号

确认序号

数据偏移

保留

URG

ACK

PSH

RST

SYN

FIN

窗口

检验和

紧急指针

选项(长度可变)

填充

 

(1) 源端口号和目的端口号与UDP一样。

(2) 序号:TCP连接中传送的字节流,每一个字节都按序号编号。

(3) 确认序号:期望收到对方下一个报文段的第一个字节的序号。

(4) 数据偏移:这个字段实际指出了TCP报文首部长度。

(5) URG:紧急标志位,表示此报文段中有紧急数据,应该快速发送。

(6) ACK:确认序号有效标记位。

(7) PUSH:推送标志位,当两个进程进行通信时,有时需要一端输入一个命令时,立即能够收到对方的响应。

(8) RST:复位标志位,RST=1,表示TCP连接中出现严重差错,需要释放连接,然后重新建立连接。

(9) SYN:在连接建立时用来同步序号

(10) FIN:用来释放连接。

(11) 窗口:指的是对方的接收窗口。接收窗口,是发送方设置发送窗口的依据。

1.2.3. 可靠传输的原理

通信双方,发送方A,和接收方B

停止等待协议:停止等待协议就是,每发送完一个分组就停止发送,等待对方的确认。在确认收到后再发送下一组。

A. 无差错情况:发送方A发送分组M1后停止发送,等待接收方B发送确认信号。接收方B接受到分组M1后,向发送方A发送确认信号。发送方A接受到B的确认信号后,继续发送分组M2

B. 出现差错情况:接收方B接受到发送A的分组M1,检测出了差错,就丢弃该报文什么也不做。发送方A等待接收方B的确认信息,A只要超过一段时间没有收到接收方B的确认信息,就重新发送分组M1

C. 确认丢失和确认迟到:接收方B发送的对M1确认信息丢失了,A在超时计时器到期后就重新发送M1分组。接收方B接收到该重复的分组M1将该重复分组丢弃,并且向A发送确认信息。

 

滑动窗口协议:ARQ

位于窗口内的分组可以被连续的发送出去,而不需要等待对方的确认。连续ARQ协议规定,发送方每收到一个确认信息就向前移动一个分组的位置。接受方一般采用累积确认的方式,不必对收到的分组注意发送确认,而是在接到几个分组后,对按序到达的最后一个分组发送确认信息,表示这个分组之前的所有分组都已到达。

1.2.4. TCP的流量控制

流量控制是让发送方的速率不要太快,让接收方来得及接收。

TCP使用滑动窗口进行流量控制,接收方会向发送方发送一个接收窗口大小。发送方发送的窗口不能超过接收方给出的接收窗口。

 

1.2.5. TCP的连接和释放

TCP连接的建立:三次握手

1) 客户端向服务端发送连接请求,将同步位SYN=1,同时讲seq=x。这时客户端进入SYN-SENT

2) 服务端接收到客户端的请求,如果同意建立连接,则向服务端发送确认报文。将SYN=1,ACK=1,ack=x+1,seq=y。服务端进入SYN-RCVD

3) 客户端接收到服务端的报文,还需要向客户端确认。将ACK=1,ack=y+1,seq=x+1。连接建立完成,客户端和服务端进入ESTABLISHED

 

为什么需要客户端第三次发送确认?

防止失效的信息重新请求连接。客户端向服务端发送连接请求,请求报文在某个网络节点阻塞,客户端超时重传新的连接请求,并建立连接,传输数据完成后。失效的请求报文到达客户端,如果没有第三次客户端的确认。则服务器建立连接后,客户端没有资源传输,这样空的连接就会浪费资源。

 

TCP连接的释放:四次挥手

1) 客户端向服务端发送连接释放报文,并停止发送数据。将FIN=1,seq=u(等于前 面发送的最后一个字节的序号加1)。进入FINAL-WAIT-1

2) 服务端接受到报文后,发送确认信号,将ACK=1,ack=u+1,seq=v(等于其那面接 受到最后一个字节的序号加1)。进入CLOSE_WAIT状态。这时客户端到服务端 的连接断开。客户端接受到确认信号后进入FINAL-WAIT-2状态。等待服务端 发送连接释放信号。

3) 服务端向客户端发送连接释放报文,将SYN=1ack=u+1,seq=wLAST-ACK

4) 客户端接收到服务端的了报文后,向客户端发送确认。将ACK=1,ack=w+1,seq=u+1.进入TIME-WAIT状态。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值