计算机网络(五、传输层)

TCP/IP详解:传输层服务、TCP与UDP对比及连接释放

一、传输层提供的服务

1.传输层的功能

(1)提供应用进程间的逻辑通信(网络层提供主机之间的逻辑通信);
(2)对收到报文的首部和数据部分进行差错检测(网络层只检查IP数据报首部,并不检查数据部分);
(3)提供无连接或面向连接的服务;
(4)复用和分用;复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据。分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。即:多个用户使用一个IO资源发送消息 时,我们称之为“复用”。多个用户使用一个IO资源 接收消息时,我们称之为 “分用” 。

2.TCP与IP的比较

TCPIP
面向连接无连接
字节流接口IP数据报接口
有流量控制、拥塞控制无流量控制、无拥塞控制
保证可靠性不保证可靠性
无丢失、无重复、按序交付可能丢失、可能重复、可能失序

3.传输层寻址与端口

1.数据链路层按MAC地址寻址,网络层按IP地址寻址,传输层按端口号寻址。
2.端口就是传输层服务访问点,端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层的相应进程。

应用程序熟知端口号
SMTP简单邮件传送协议25端口
TELNET远程终端协议23端口
HTTP超文本传输协议80端口
FTP文件传送协议21/20端口
POP3邮件读取协议110端口
DNS域名解析服务53端口
TFTP简单文件传送协议69端口
SNMP简单网络管理协议161/162端口
DHCP动态主机配置协议67/68端口

3.套接字=(主机IP地址,端口号)唯一标识了网络中的某台主机上的某个应用进程。

4.UDP和TCP对比

TCP:Transmission Control Protocol传输控制协议UDP:User Data Protocol用户数据报协议
提供面向连接的、可靠的服务不建立连接、不可靠
面向字节流面向报文
点对点通信支持一对一、一对多、多对一、多对多通信
适合传输大量数据适合传输少量数据
传输速度慢传输速度快
TCP首部开销是20个字节UDP首部开销是8字节

UDP不可靠的原因:
不保证消息交付:不确认,不重传,无超时,数据报发出去,就不保留数据备份了。
不需要拥塞控制: UDP没有服务器和客户端的概念,不内置客户端或网络反馈机制。
UDP报文过长的话是交给IP切成小段,如果某段报废,整个报文就废了。
UDP校验只提供差错检测,差错检验方法处理快,但检测能力不强。

二、TCP连接与释放

1.TCP三次握手过程

1.第一次握手:客户端将标志位SYN置为1,随机产生一个值序列号seq=x,并将该数据包发送给服务端,客户端 进入syn_sent状态,服务器是LISTEN状态,等待服务端确认。
2.第二次握手:服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN和 ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求,服务端进入syn_rcvd状态。
3.第三次握手:客户端收到确认后检查,如果正确则将标志位ACK为1,ack=y+1,seq=x+1,并将该数据包发送给服务端,服务端进行检查如果正确则连接建立成功,客户端和服务端进入established状态,完成三次握手,随后客户端和服务端之间可以开始传输 数据了。

2.为什么TCP握手需要三次,两次行不行?

客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间后,就会重新请求连接。

但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。

如果有三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

第三次握手是为了防止失效的连接请求到达服务器,让服务器打开多个连接。

半连接队列:TCP握手中,当服务器处于SYN_RCVD 状态,服务器会把这种状态的连接放在一个队列里,该队列称为半连接队列。
DDos攻击:SYN攻击是利用TCP协议的缺陷,发送大量的半连接请求,占用半连接队列,耗费CPU和内存资源的一种攻击方式。

3.TCP四次挥手过程

1.第一次挥手:客户端发送一个FIN=1,序号seq=u,用来关闭客户端到服务端的数据传送,客户端进入fin-wait1状态。
2.第二次挥手:服务端收到FIN后,发送一个ACK=1,seq=v,ack=u+1给客户端,服务端进入Close_wait状态。客户端收到ACK后变成fin-wait2状态。
此时TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,则客户端仍要接收。
3.第三次挥手:服务端发送一个FIN=1,ACK=1,seq=w,ack=u+1,用来关闭服务端到客户端的数据传送,服务端进入Last_ack状态。
4.第四次挥手:客户端收到FIN后,客户端进入Time_wait状态,接着发送一个ACK=1,seq=u+1,ack=w+1给服务端,确认后,服务端进入Closed状态,客户端等待2MSL后变为closed状态,完成四次挥手。

4.为什么TCP挥手需要4次?

主要原因是当服务端收到客户端的 FIN 数据包后,服务端可能还有数据没发完,不会立即close。

5.为什么四次挥手释放连接时需要等待2MSL?

MSL即报文最大生存时间。1.设置2MSL确保最后一个确认报文能够到达。2.设置2MSL可以保证本次连接的所有报文在网络中消失,不会与新TCP连接报文发生冲突。

三、流量控制与可靠传输

1.流量控制

控制发送方发送数据的速率,使得接收方来得及接收。常见的两种方式是停止-等待流量控制和滑动窗口流量控制。

停止-等待流量控制的工作原理就是发送方发出一帧,然后等待应答信号到达再发送下一帧;接收方每收到一帧后,返回一个应答信号,如果接收方不返回应答,则发送方必须一直等待。

滑动窗口流量控制允许一次发送多个帧。发送窗口内的序号代表了那些已发送还未确认的帧或者还未发送的帧。接收窗口的序号代表了一组连续的允许接收的帧。发送方每收到一个帧的确认,发送窗口向前滑动一个帧的位置;同理,接收端收到一个数据帧后,也将窗口向前滑动一个帧的位置。如果接收到的数据帧没有落在窗口内,则一律丢弃。

2.可靠传输

传输差错分为两类:一类是比特差错,可以通过CRC来检测,另一类是帧丢失、帧重复、帧失序等情况。在数据链路层使用的CRC检验只能实现无比特差错的传输,但不是可靠传输。

在传输层使用的面向连接的TCP来保证端到端的可靠传输,只要主机B的TCP发现数据传输有差错,就告诉主机A将出现差错的那部分数据重传,直到这部分数据正确传送到主机B为止。

3.滑动窗口机制

1.停止等待协议
发送窗口大小=1,接收窗口大小=1。
2.后退N帧(GBN)协议
发送窗口大小>1,接收窗口大小=1。
3.选择重传(SR)协议
发送窗口大小>1,接收窗口大小>1。

4.TCP粘包现象

TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。1.发送端需要等缓冲区满才发送出去,造成粘包。2.接收方不及时接收缓冲区的包,造成多个包接收。
TCP默认会使用Nagle算法,此算法会导致粘包问题。
TCP粘包现象处理方法:
(1)发送固定长度的消息;
(2)把消息的尺寸和消息一块发送;
(3)使用分隔符来区分消息间隔;
(4)设置TCP_NODELAY参数来屏蔽Nagle算法;

5.TCP的拥塞控制

如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此,当出现拥塞时,应当控制发送方的发送速度。

TCP通过四个算法进行拥塞控制:
(1)慢开始算法:
令拥塞窗口cwnd=1,也就是说发送方只能发送一个报文段,每次收到确认后,将cwnd加倍。之后发送方能够发送的报文段数量为2、4、8…
同时设置一个慢开始门限ssthresh,当cwnd>=ssthresh时,进入拥塞避免。

(2)拥塞避免算法:
每个轮次只将拥塞窗口cwnd加1。如果出现了超时,则将慢开始门限ssthresh设置为当前拥塞窗口的一半,进入慢开始阶段。

(3)快重传算法:
在接收方,要求每次接收到报文段都应该对接收到的最后一个有序报文段进行确认。
在发送方,如果收到三个重复确认,就会认为下一个报文段丢失,执行快重传算法,立即重传下一个报文段。

(4)快恢复算法:
只是丢失个别报文段,而不是网络拥塞时,执行快恢复算法。令ssthresh=cwnd/2,cwnd=ssthresh,直接进入拥塞避免。

注:
当cwnd < ssthresh 时,使用慢开始算法。
当cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当cwnd = ssthresh 时,即可使用慢开始算法,也可使用拥塞避免算法。

慢开始和快恢复:慢开始和快恢复的快慢指的是cwnd的设置值,而不是cwnd的增长速率。慢开始cwnd设定为1,而快恢复cwnd设定为ssthresh。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉浮一湘蕉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值