网络参考模型与标准协议
应用层
应用层为应用软件提供接口,是应用程序能够使用网络服务。应用层协议会指定使用相应的传输层协议,以及传输层所使用的的端口等。应用层的PDU(TCP/IP每一层都让数据得以通过网络进行传输,这些层之间使用PDU<协议数据单元>彼此交换信息,确保网络设备之间能够通信)被称为DATA。
应用层 | HTTP 80(TCP)超文本传输协议,提供浏览网页服务 |
---|---|
Telnet 23(TCP)远程登录协议,提供远程连接管理服务 | |
FTP 20/21 (TCP)文件传输协议,提供互联网文件资源共享服务 | |
SMTP 25 (TCP)简单邮件传输协议,提供互联网电子邮件服务 | |
TFTP 69 (UDP)简单文件传输协议,提供简单地文件传输服务 |
常见的应用协议FTP
FTP是一个用于从一台主机传送文件到另一台主机的协议,用于文件的下载和上传,它采用C/S结构
常见应用协议-Telnet
Telnet是数据网络中提供远程登录服务的标准协议。Telnet为用户提供了在本地计算机上完成远程设备的工作能力。
常见应用层协议-HTTP
HTTP是互联网上应用最为广泛的的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
传输层
传输层协议接收来自应用层的数据,封装上相应的传输层头部,帮助其建立“端到端”的链接。传输层的PDU被称为Segment(段)。
传输层 | 传输层协议:TCP一种面向连接的、可靠的传输层通信协议,由IETF的RFC 793定义 |
---|---|
UDP:一种简单的无连接的传输层协议,由IETF的RFC 768定义 |
TCP报文头部:
-
Source Port:源端口,标识哪个应用程序发送。长度为16比特
-
Destination Port :目的端口。标识那个应用程序接收。长度为16比特
-
Sequence Number:序号字段。TCP连接中传输的数据流每个字节都编上一个序号。序号字段的值指的是本报文段所发送的第一字节的序号。长度为32比特。
-
Ackonwledgment Number:确认序列号,是期望收到对方下一个报文段数据的第一个字节的序号,即上次已成功接收到的数据段的最后一个字节数据的序号+1。只有Ack表示为1,此字段有效、长度为32比特。
-
Header Length:头部长度,指出TCP报文头部长度,以32比特为计算单位。若无选项内容,则该字段为5,即头部为20字节。
-
Reserve:保留,必须填为0,长度为6比特。
-
Control bits:控制位,包含FIN、SCK、SYN等标识位,代表不同状态下的TCP数据段。
-
Window:窗口TCP的流量控制,这个值表明当前接收端可接受的最大的数据总数(以字节为单位)。窗口最大为65535字节,长度为16比特。
-
Checksum:校验字段,是一个强制性的字段,由发端计算和存储,并由收端进行验证。在计算检验和时,要包括TCP头部和TCP数据,同时在TCP报文段的前面加上12字节的伪头部,长度为16比特。
-
Urgent :紧急指针,只有当URG标志置1时紧急指针才有效。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节。长度为16比特。
-
Options:选项字段,长度0-40字节
UDP报文头部: -
Source Port:源端口,标识哪个应用程序发送。长度为16比特
-
Destination Port:目的端口,标识哪个应用程序接收,长度16比特
-
Length:该字节指定UDP报头和数据总共占用的长度。可能最小的长度是8字节,因为UDP报头已经占用了8字节,由于这个字段的存在,UDP报文总长不可能超过65535字节
-
Checksum:覆盖UDP头部和UDP数据的校验和,长度为16比特
TCP的建立-三次握手
TCP链接建立的详细过程如下:
由TCP链接发起方,发送第一个SYN位置1的TCP报文。初始序列a为一个随机生成的数字,因为没收到来自PC2的任何报文,所以确认序列号为0;
接收方接收到合法的SYN报文之后,回复一个SYN和ACK置1的TCP报文。初始序列号b为一个随机生成的数字,同时 因为此报文是回复给PC1的报文,所以确认序列号为a+1;
PC1接收到PC2发送的SYN和ACK置位的TCP报文后,回复一个ACK置位的报文,此时序列号为a+1,确认序列号为b+1。PC2接收到之后,tcp双向连接建立。
TCP的序列号与确认序列号
假如PC1要给PC2发送一段数据,传输过程如下:
-
PC1将全部待TCP发送的数据按照字节为单元编上号。假设第一个字节的编号为“a+1”,第二个字节的序号为“a+2”,以此类推
-
PC1会把每一段数据的第一个字节的编号作为序列号,然后将TCP报文发送出去。
PC2在接收到PC1发送来的TCP报文后,需要给予确认同时请求下一段数据。下一数据的第一个字节的序号:a+1+12
PC1在收到PC2发送的TCP保温之后,发现确认序列号为a+1+12说明a+1到a+12这段数据已经被接收,需要从a+1+12开始发送
为了提升发送效率,也可以一次性发送多段数据,由接收方同意确认。
TCP的窗口滑动机制
1.在TCP三次握手建立连接时,双方都会通过Window字段告诉对方本端最能够接受的字节数(即缓冲区大小)
2.连接建立成功后,发送方会根据接收方宣告的Window大小发送相应字节数的数据。
3.接收方接受数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。如数据被上层取走,则相应的缓冲空间将被释放。
4.接收方根据自身的缓存空间大小通告当前的可以接受的数据大小。
5.发送方根据接收方当前window大小发送相应数量的数据。
TCP的关闭-四次挥手
过程:
1.由PC1发送一个FIN字段置位1的不带数据的TCP段。
2.PC2收到PC1法老的FI置位的TCP报文后,会回复一个ACK置位的TCP报文。
3.若PC2也没有需要发送的数据,则直接发送FIN置位的TCP报文。假设此时PC2还有数据要发送,那么当PC2发送完这些数据之后会发送一个FIN置位的TCP 报文去关闭连接。
4.PC1收到FIN置位的TCP报文,回复ACK报文,TCP双向连接断开。