常见网络协议

一、传输层协议

最重要的一层,负责总体的数据传输,数据控制的一层。传输层提供端到端的交换数据的机制,检查分组编号和次序,对会话层提供可靠的传输服务,对网络层提供可靠的目的地站点信息。这一层数据的单位称为数据段。

主要功能:

1.为端到端连接提供传输服务

2.分为可靠传输tcp,不可靠传输udp

3.为端到端的连接提供流量控制,差错控制,服务质量等管理服务

TCP

面向连接的,可靠的。

数据从应用层发下来,会在每一层都加上头部信息,进行封装,然后发送到数据接收端。所以数据的发送和接收就是数据的封装和解封装的过程

1.Tcp报文格式

源端口和目的端口:各占16位,用于区别主机中的不同进程。IP地址区分不同主机,两个配合就能确认一个唯一的TCP连接

序号:用来标识从tcp发端到tcp收端发送的数据字节流,表示在这个报文段中的第一个数据字节在数据流中的序号;用来解决网络包乱序的问题。

确认号:32位,包含发送的一端所期望收到的下一个序号,因此确认号应该是上次上次成功收到的数据字节序号+1,只有当标志位中ack标志为1时,确认号才有效。主要用来解决丢包的问题。没有收到ACK会认为丢包将会重传。超时重传的时间是比包往返时间+偏差大一点的值。

TCP标志位:TCP首部中有6个标志比特,它们中的多个可同时被设置为1,主要是用于操控TCP的状态机的,依次 为URG,ACK,PSH,RST,SYN,FIN。
URG:此标志表示TCP包的紧急指针域有效,用来保证TCP连接不被中断,并且督促 中间层设备要尽快处理这些数据;
ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1, 为1的时候表示应答域有效,反之为0;
PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序, 而不是在缓冲区中排队;
RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;
SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1, ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送 一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这 种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全 的主机将会强制要求一个连接严格的进行TCP的三次握手;

FIN:该位为1时,表示今后不会再有数据发送,希望断开连接。断开时,通信双方交换FIN位为1的tcp段,每个主机又对对方的FIN包进行确认应答以后就可以断开连接。主机收到FIN为1的tcp段以后不必马上回FIN包,等缓冲区中的所有数据都成功发送之后再发。

窗口:接收主机可以接收的缓冲区的大小,发给发送端。

数据:长度没有写入tcp首部,公式:tcp包长度=ip首部中数据包的长度-IP首部长度-tcp首部长度。

2.三次握手

TCP是面向连接的,发送数据之前必须先建立连接。三次握手的目的是同步连接双方的序号和确认号,交换窗口的大小

发送数据包的大小怎么确认的:三次握手的时候,会在tcp首部额外+4字节写入MSS(最大消息长度),告诉对方自己能接受的MSS的大小,选一个小的。如果有一方省略MSS不超过536

  1. 第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认。(客户的建立连接并等待确认

  2. 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态。(服务器端发送相关报文段信息并等待连接

  3. 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。(客户的接收到服务端信息并实现连接

3.四次挥手

1.第一次挥手:A的应用进程先向其TCP发出连接释放报文段(FIN=1,序号seq=u),并停止再发 送数据,主动关闭TCP连接,进入FIN-WAIT-1(终止等待1)状态,等待B的确认。
2.第二次挥手:B收到连接释放报文段后即发出确认报文段,(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,A到B的连接释放。A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
3.第三次挥手:B没有要向A发出的数据,B发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),B进入LAST-ACK(最后确认)状态,等待A的确认。
4.第四次挥手:A收到B的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态。

4.滑动窗口与流量控制

tcp每发一个段进行一次确认应答,包的往返时间越长吞吐量就越低。为解决这种情况引入窗口。

确认应答不再以每个分段,而是以更大的单位进行确认。窗口的大小就是指无需等待确认应答而可以继续发送数据的最大值。由接收端决定

这个机制使用大量缓存区临时保存收发数据,对多个段同时进行确认应答。

发送端根据自己的实际情况发送数据,接收端可能在高负荷的情况下无法接收任何数据,此时接收端将本应该接收的数据丢弃的话就会触发重发机制,浪费流量。为防止这种现象,tcp提供了一种机制,接收端主机向发送端主机通知自己可以接收数据的大小,发送端会发送不超过这个限度的数据,该大小限度被称作窗口大小。接收端的缓存区一旦面临数据溢出,窗口的值会被设置为一个更小的值发给发送端,从而控制数据发送量。接收端缓冲区满停止接收数据,数据处理完之后,发送窗口更新通知继续通信,如果窗口更新通知丢失,过了超时重发的时间发送端会发送窗口探测的包(仅包含一字节获取最新窗口大小),这就是流量控制。

1、客户端向服务器发起连接,客户端的滑动窗口是4096,一次发送的最大数据量是1460(第一次握手);

2、服务器接收连接情况,告诉客户端服务器的窗口大小是6144,一次发送的最大数据量10243(第二次握手);

3、第三次握手;

4、4-9客户端连续给服务器发送了 6k 的数据,每次发送 1k;

5、第10次,服务器告诉客户端:发送的6k数据以及接收到,存储在缓冲区中,缓冲区数据已经处理了 2k,窗口大小是 2k;

6、第11次,服务器告诉客户端:发送的 6k 数据以及接收到,存储在缓冲区中,缓冲区数据已经处理了 4k,窗口大小是 4k;

7、第12次,客户端给服务器发送了 1k 的数据;

8、第13次,客户端主动请求和服务器断开连接,并且给服务器发送了1k的数据

9、第14次,服务器回复ACK 8194,a:同意断开连接的请求 b:告诉客户端已经接受到方才发的2k的数据 c:滑动窗口2k;

10、第15、16次,通知客户端滑动窗口的大小;

11、第17次,第三次挥手服务器端给客户端发送FIN ,请求断开连接;

12、第18次,第四次回收各户端同意了服务器端的断开请求。

说明:1-3是三次握手,4-9是进行通信;第一次和第二次握手时不能带有通信数据,因为还没有建立连接,第三次握手时可以带通信数据。

5.重发控制

确认应答未能返回的情况:

没有窗口:没有收到确认应答的数据都会被重发。

有窗口:有少部分确认应答丢失也不会进行数据重发,可以通过下一个确认应答进行确认。

某一报文段丢失的情况:

没有窗口:没有收到ACK会认为丢包将会重传。超时重传的时间是比包往返时间+偏差大一点的值。

有窗口:发送端中间发的包丢失,继续发包,接收端如果接收到一个自己应该接收的序号以外的数据,会根据自己当前收到的数据返回确认应答。当发送主机连续3次收到同一个确认应答,就会将对应的数据进行重发,更加高效,称为高速重发控制。

6.拥塞控制:在通信刚开始时就发送大量数据,可能会引发网络拥堵瘫痪,tcp在通信一开始会通过一个叫慢启动的算法得出的数值,对发送数据量进行控制。

延迟确认应答:在接收端接收到数据立刻返回确认应答的话,因为数据还没处理,返回的窗口较小,发送端只能发更小的数据降低了网络利用率,为此引入延迟确认应答。1.每收到两个数据段发送一次确认应答2.等待0.2s没有其他数据,发送确认应答。

捎带应答:在同一个tcp包中既发送数据又发送确认应答的一种机制,确认应答必须得等到应用处理完数据并将作为回执的数据返回为止。如果没有启用延迟确认应答就无法实现捎带应答。

UDP

面向无连接的协议,不可靠传输

1.Udp报文格式

报文头8字节

 2.Udp特性

  • UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当 UDP想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
  • 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
  • UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
  • 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
  • UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
  • UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。 虽然UDP是一个不可靠的协议,但它是分发信息的一个理想协议。例如,在屏幕上报告股票市场、在屏幕上显示航空信息等等。UDP也用在路由信息协议RIP(Routing Information Protocol)中修改路由表。在这些应用场合下,如果有一个消息丢失,在几秒之后另一个新的消息就会替换它。

二、应用层协议

应用层协议,HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP

HTTP协议是用于从服务器传输超文本到本地浏览器的传送协议。

1.http特点

1. HTTP支持B/S以及C/S模式。

2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径即可。请求方法包括GET、POST、PUT、HEAD等。

3. 灵活:HTTP允许传输任意类型的数据对象。

4. 无连接:每次连接只处理一个请求服务器处理完客户的请求,并收到客户的应答后,即断开连接。可以节省传输时间。

5. 无状态:对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传。但如果服务器不需要先前信息时它的应答就比较快。

2.http请求

get/post区别:

1、post请求更安全;post请求不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中,get请求的是静态资源,则会缓存,如果是数据,则不会缓存。2、post请求发送的数据更大,get请求有url长度限制。3、post请求能发送更多的数据类型,get请求只能发送ASCII字符。4、传参方式不同。5、get产生一个TCP数据包;post产生两个。(get请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据;post请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 返回数据)

3.http响应

状态码:

1**:信息,服务器收到请求,需要请求者继续执行操作

2**:成功,操作被成功接收并处理

3**:重定向,需要进一步的操作以完成请求

4**:客户端错误,请求包含语法错误或无法完成请求

5**:服务器错误,服务器在处理请求的过程中发生了错误

4.HTTP工作原理

在浏览器地址键入URL,工作流程:

1. 浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址

2. 解析出IP地址后,根据该IP地址和默认端口号80,与服务器建立TCP连接

3. 浏览器发出HTTP请求给服务器

4.服务器对浏览器请求做出响应,并把对应的html文本发送给浏览器

5. 释放TCP连接

6. 浏览器将该html文本显示出来

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值