网络基础四 传输层

server(指的服务器端) ,client(指的是客户端)算法

1、 传输层做用缓存

传输层的做用其实就是实现,两台在主机中应用程序之间的通讯。(被称之为逻辑通讯)服务器

 

 

 

传输层协议网络

TCP(传输控制协议)数据结构

MSL :一个传输报文,在网络上最大的生存时间 ,和咱们的ttl概念有点相似。不过msl是指的时间,而后ttl是指一个数据包,在整个网络中转发,最多能够通过多少台路由器。tcp

1、tcp报文数据结构优化

首先tcp报文,和ip数据包是同样的,也分为首部和数据部分,下图就是tcp报文的首部spa

 

根据上述图中,tcp报文的首部长度也是有20个字节,一共有5层,每一层4个字节,源端口和目的端口就是两个须要通讯进程对应的端口号,很少说3d

序号(seq):若是是在创建链接的过程,这个初始序列号是发送端随机产生的一个数字。指针

确认号(ack):指定的是下一个指望接收的字节

数据偏移:整个tcp报文,从哪一位开始是数据部分,而不是tcp首部。

保留:用于之后的扩展

接下来每一个8个1bit的标志位:这8个标志位是成对使用的

cwr和ece 用来处理拥塞控制 。

syn 和ack ,syn用来创建链接的 ,ACK标识,确认位(ack)是有效的。用来标识这是一个确认报

urg 和psh 是用来表示数据包传输和接收优先的,urg是发送端优先 ,psh是接收端优先接收。

rst 和 fin ,rst是用来处理重置一个链接,fin表示释放一个链接。

窗口 :用来处理流量控制的,应用了滑动窗口技术,这个会在tcp特性中讲解。

检验和 :就是用来检测整个数据包的

紧急指针:和urg标志位共用,一旦urg是1,紧急指针是用来标识整个tcp报文从哪一个字节开始是优先处理部分。

 

2、特性:面向链接 、 可靠传输 、 流量控制,拥塞控制 、 面向字节流

 

首先解释一下什么是可靠传输:

RTT(Round Trip Time):一个链接的往返时间,即数据发送时刻到接收到确认的时刻的差值; 

tcp协议的可靠传输是指,中止等待协议,简单来理解就是send一个tcp报文,必需要等待一个receive返回一个确认信息。若是没有收到,就中止等待,

中止等待的时间就是rtt,若是过了这个时间尚未收到确认信息,就再发送一次以前的报文。可是因为这种协议效率过低了,基于这种原理,就是出现了

流水线发送累计确认

流水线发送:

累积确认:就是发送方一次发送多个数据包,接收方,根据已经接收到的,统一给一个确认

 

 

 面向链接:注意我说的是链接(不是三次握手,四次断开),首先咱们应该思考一下为何要创建链接,由于tcp通常是交付应用层较大的文件,因此,是多要多个

tcp数据报文(或者称之为分组或者段),这个时候,咱们都用这一个链接,将一个大的文件,实现一个完整的交付。假如说没有这个链接,咱们发送端要给接收端一个大的文件

,这个中间的传输过程,可能就会走不少不一样的链路,可能,是这个文件最后的尾部先到了,首部丢失了,这样就会致使传输很混乱,因此创建了一个链接保证一个稳定的传输。下降丢包的几率

接下来,咱们为了创建这个链接就须要到了三次握手,四次挥手了,重点来了!!!

 第一个为何要三次握手才能创建一个链接,是由于防止出现僵尸链接。若是只须要一次请求,一次确认,就能够创建一个链接。会出现这样一个状况,第一次发送的状况,走的链路发了阻塞,超过了rtt时间,

这个时候,发送端在发送一个请求,接收端接收,发送一个确认。链接创建,穿了一些数据,最后链接释放了。这个时候第一次发送的请求到了接收端,接收端是没法判断这个是第一次请求的,就会直接给一个确认,就创建了

一个新的链接。而这个链接,就消耗了资源。一旦这样的链接多了,会致使主机崩溃。

三次握手的详细过程

a: 发送端发送一个请求,tcp报文中标志位,SYN=1,ack=0 ,seq是一个随机数字.,假如是x

b:接收端收到一个请求返回一个确认 ,tcp报文中, SYN=1 ,ack=x+1 ,ACK=1 ,seq=y

c:发送端接收到这个确认,在发送一个确认给接收端 ,tcp报文中是ACK=1 , ack=y+1 ,seq=x+1

 

 上述一个链接创建的过程

数据传输完成以后,就涉及到链接的释放,也就是传说中的四次挥手 ,首先解释一下为何会有四次挥手。 由于tcp是全双工通讯,这就至关于一对

单工通讯。因此当client主动发起释放链接,告诉server,我这边没有数据发送了,关闭client向server端发送数据的通道。这个时候,颇有可能,server端

正在给client发送数据,若是这个时候,client直接断开了,client就接收不到这段数据了,就好像,打电话,A给B打电话,A把想说的话说完了,直接挂断了,B

还有想要回应的话,这个时候,B没有说完,A直接挂断了。而正常的通讯方式是,A说完了,A说我讲完了须要挂断 , B说先别挂断,等一下,我还优化要说。等B

说完 , 告诉A,我讲完了,我也要挂断了。A说能够。而后B挂断。随后A等到通道忙音后,就挂断了。

四次挥手详细过程

A:发起用释放链接的请求,FIN=1 ,SEQ =U .

B:给一个确认,ack=u+1 ,ACK=1 ,seq =v

B:发送一个请求释放个人链接,fin=1 ack =u+1 ,seq =w ,ack=1

A:给一个确认 ,ACK=1 ,ack=w+1 ,seq = u+1

 

 

咱们看到在链接创建和释放的过程当中,这个链接都是有状态的,下面详细解读一下这个状态。

 CLOSED: 链接处于关闭状态

LISTEN:服务器端处理处于监听状态,监听tcp链接请求

SYN RECD : 服务器端接到一个链接请求 ,并返回给client一个确认,等待client发来一个确认链接

SYN SEND : 客户端主动发起一个链接,等待服务器端匹配链接,返回确认

EStablished :链接已经创建 ,处理传输数据的状态

FIN WAIT1 : 主动释放链接一端,已经没有数据要发了,请求释放链接

FIN WAIT2 :另外一端赞成释放链接

TIME WAIT :等待2msl时间等待 ,发送一个链接断开的确认信息

Close WAIT :接收一个关闭链接的请求,并请求本地应用,等待本地发起的关闭链接请求

LAST ACK :等待关闭链接的确认

 

滑动窗口技术:用来处理流量控制:

窗口的大小是可变的

 

 

 

缓存中有存在窗口,来处理,发送的数据或者接收的数据,是以字节为单位的。窗口控制能够发送数据的大小,窗口经过移动,控制发送数据的范围。

拥塞控制:

这个拥塞控制就是tcp有一个拥塞窗口,用来分析链路上,信信道是否阻塞,若是不是阻塞的就多发点包,

若是是阻塞的就根据算法,少发包。

面向字节流的:

就是tcp通常是交付大文件的,一个文件将会有不少个字节,一个tcp报文是传输不完的,因此每个tcp传输报文其实是文件中一部分字节,

因此说是面向字节流的。

 

UDP :无链接 、 不可靠传输、udp面向是文件

简答来理解 ,无链接就是udp报文能够在任何一个链路上传输tcp报文

不可靠传输是指,udp包发送没有确认,若是丢失,,客户端会从新发请求。服务器端在来发送udp包。

一个udp报就能处理顶层整个文件,不处理大型的文件。

相关文章
相关标签/搜索