关闭

计算机网络——运输层

188人阅读 评论(0) 收藏 举报
分类:

这里要讨论TCP/IP协议中最重要的两个协议TCP/UDP,而TCP的各种机制也是相对比较复杂的,也是面试常考的。

1.进程间通信

1.只有主机在的协议栈有运输层,而网络的路由器在转发分组时只用到下面三层(网络层,数据链路层,物理层)

2.IP协议在进行数据通信时能够找到目的主机的IP地址,完成分组的传输,但是传输的过程中,依然是停留在网络层,而没有进入应用层,换句话说就是没有到达目的主机的进程中,但我们知道,由于两个主机进行通信,就是进程间的通信,所以为了解决这个问题,就有了运输层。所以我们称网络层是为主机之间提供逻辑通信,运输层是为应用进程之间的提供端对端的逻辑通信。网络层只对IP数据报首部检验不会对里面的报文内容进行检测,而运输层就是对报文内容进行检测。

3.运输层的两个主要协议:TCP(面向连接)/UDP(无连接),当运输层采用TCP时,尽管网络层不可靠,但是这种逻辑通信却能保证是一种全双工的可靠信道。但当采用UDP时,这种协议仍然是一种不可靠的信道。

如下图是一些使用TCP和UDP的应用:


4.协议端口号(端口):这个是为了解决运输层上的复用后如何分用的问题。如何区分不同进程要和不同的目的进程进行通信的问题。协议端口的作用是:虽然通信的终点是应用进程,但是我们只需要把要传送的报文交到目的主机的某一个合适的目的端口就行,剩下的工作就是由TCP来完成。这是一种软件端口,就是一个地址而已。端口号只具有本地意义,它是为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口。所以端口号可分为:服务器端使用的端口号,登记端口号,客户端使用的端口号(短暂的)

下面是一些服务器端使用的端口号:


2.TCP(面向连接)

1.特点:面向连接、只有两个端点(点对点)、提供可靠交付、全双工通信、面向字节流。
2.TCP发送多长的报文是由对方给出的窗口值和当前网络的拥塞情况决定的,而UDP却不是,它是由应用层发送决定的。
3.端点:每一个TCP的连接是作为最基本的抽象,每一个连接有两个端点,这个端点就是套接字(插口),是由端口号拼接到IP地址构成了套接字。
socket=(IP地址:端口号)
每一个TCP连接唯一地被通信两端的两个端点确定:TCP连接::={socket1,socket2}
4.停止等待协议:被称为最简单的协议,这个协议要处理的情况有四个:无差错、出现差错、确认丢失、确认迟到。
出现差错:是指发送的报文在传输过程中出现问题,弄丢了,这个时候接收方不会发送确认消息,发送方在等待一定的时间内没有收到消息就会重新发送,保证数据的正确传输。
确认丢失:接收方在接收到报文时,返回确认信息时丢失了,那么发送方没有接收到确认信息,重新发送,接收方丢弃这个信息,返回收到信息给发送方。
确认迟到:接收方在接收到信息时,返回给发送方的信息超过了发送方的等待时间,发送方再次发送信息,此时接收方丢弃信息,再次发送确认信息,那么发送方可能会接收到两个确认信息而已。
5.TCP报文段首部结构:
1).源端口和目的端口(共4字节):这个类似于UDP一样,在运输层分用时利用端口号进行查找。
2).序号(共4字节):TCP是完成报文的传输,但是需要用字节流来完成,在TCP连接的字节流中都是按照顺序编号的。序号的使用时MOD2^32。
3).确认号(共4字节):是期望收到对方下一个报文段的第一个数据字节的序号。当确认号为N时,其前面N-1个均已经正确接收。
4).数据偏移(4字节):TCP报文段的首部长度
5).保留(6位):以备传输过程用,分别是紧急(URG)、确认(ACK)、推送(PSH)、复位(RST)、同步(SYN)、终止(FIN)。
紧急(URG):配合紧急指针,表明发送方要把紧急数据先发送,有点像优先级比较高的一样。
确认(ACK):这个位如果为0,收到确认号无效,当确认号为1时才有效,在连接建立后,所有的传送报文段都必须把该位置1,ACK=1.
推送(PSH):这个是希望在两个进程进行交互式通信时,希望接收方立即答复,这事接收方接收到这个信息后,就不等缓存满了之后在上交给应用层,而是直接提交给应用层。
复位(RST):当这个位为1时,表明TCP的连接出现了严重的差错,必须释放连接然后重新建立连接。RST=1还可以用来拒绝一个非法的报文段或者拒绝打开一个连接。
同步(SNY):SNY=1表示是一个连接请求或者连接接受报文
终止(FIN):用来释放一个连接。FIN=1表明此报文段的发送方的数据已经发送完毕,要求释放连接。
6).窗口(2字节):这是一个表明允许对方发送多大的数据量的标志,因为接收方有缓存限制,导致不得不要对发送方有要求。
7).检验和(2字节):和UDP一样,检测两部分,首部个数据
8).紧急指针(2字节):这个是和URG标志位一起连用,表明要先发送的数据。即使窗口为0时也可以发送紧急数据。
9).选项(最长40个字节):最大报文段长度(MSS)、窗口扩大、时间戳、选择确认(SACK)。
6.TCP的可靠传输:有三点需要值得注意:1.虽然A的发送窗口是由接收方B的接收窗口决定的,但是,同一个时刻接收窗口并不一定等于发送窗口。2.对于不按顺序到达的数据,TCP通常是先存放,然后等到所缺字节到期一起上交给应用层。3.TCP要求接收方必须有累积确认功能。
利用选择确认可以使得发送方只是发送那些缺失的数据,而不必全部发送。
7.TCP的流量控制:这个是为了给接收方能够有时间接收和处理接收的数据,以免丢失。这个利用滑动窗口实现
8.TCP的拥塞控制:防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不至于过载。几种拥塞控制的方法:慢开始(成倍增加)、拥塞避免(每次加1)、快重传、快恢复。
下图是慢开始和拥塞避免的实现:

下面是快重传和快恢复的过程:

9.TCP的运输连接管理(重点)
三过程:连接建立、数据传送、连接释放。
1).连接解决三个问题:资源分配,告知对方存在,协商参数
三次握手:

第一次握手:主机A发送位码为syn=1,随机产生seq number=X的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=Y的包

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

如图:


2).连接释放(四次握手)

1、客户端发送一个FIN,用来关闭客户端到服务器的数据传送,此时客户端进入TIME_WAIT1状态
2、服务器收到这个FIN,它发回一个ACK,确认号为收到的序号加1,和SYN一样,一个FIN将占用一个序号,此时服务器进入CLOSE_WAIT状态,客户端端进入TIME_WAIT2
3、当服务器端也没有要传送的数据时,服务器关闭与客户端的连接,发送一个FIN给客户端A,服务器进入LAST_ACK
4、客户端发回ACK报文确认,并将确认号设置为收到序号加1,客户端进入TIME_WAIT,等待2MSL--120s,服务器端接后进入CLOSED

如图:



3.UDP(无连接)

1.特点:无连接的、尽最大努力交付、面向报文的、没有拥塞控制、支持一对一、一对多、多对一、多对多、首部开销小(8字节)。

2.UDP的首部格式:

8个字节分别是2字节的源端口,2字节的目的端口,2字节的长度,2字节的检验和

在进行检验和时会产生一个伪首部,这个并不向上或向下传播,仅仅是为了做检验,但是和IP不同的是,这个检验会检验首部字段和数据字段。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15562次
    • 积分:820
    • 等级:
    • 排名:千里之外
    • 原创:67篇
    • 转载:13篇
    • 译文:0篇
    • 评论:0条