一、传输层
- 传输层是OSI参考模型中的第四层,传输层协议为网络端点主机上的进程之间提供了可靠、有效的报文传送服务。
- 传输层的服务一般要经历传输连接建立阶段,数据传送阶段,传输连接释放阶段3个阶段才算完成一个完整的服务过程。
- 而在数据传送阶段又分为一般数据传送和加速数据传送两种形式。
- 传输层中最为常见的两个协议分别是传输控制协议(TCP)和用户数据报协议(UDP)。
- 传输层提供逻辑连接的建立、传输层寻址、数据传输、传输连接释放、流量控制、拥塞控制、多路复用和解复用、崩溃恢复等服务。
二、传输层协议
1、TCP协议( 传输控制协议):
1.TCP/IP协议族传输层协议
TCP是面向连接的,可靠的进程到进程通信的协议;
TCP提供全双工服务,即数据可在同一时间双向传输;
TCP报文段:
(1)TCP将若干个字节构成一个分组,叫报文段(Segment)
(2)TCP报文段封装在IP数据报中
- 源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即 65536 (0-65535)
- 序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0 开始 无限循环
- 确认号:(ack)表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号:传输是否有问题?
- 数据偏移/首部长度:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
- 控制位
- URG(紧急位):表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效
- ACK(确认位):表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
- PSH(急切位):提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中
- RST(重置位):如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段
- SYN(同步位):在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
- FIN(断开位):表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
- 窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值
- 校验和:提供额外的可靠性紧急指针:标记紧急数据在数据字段中的位置
- 选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节
注意:不要将确认序号Ack与标志位中的ACK搞混了。确认方Ack=发起方Seq+1,两端配对。
2.三次握手原理:
客户端向服务器发送SYN同步请求,请求与服务器建立连接,服务器收到此SYN同步请求后,会针对客户端的SYN同步请求进行ACK响应的同时也会发送一个SYN同步请求,当客户端收到服务器发过来的SYN同步请求时,会给予一个ACK响应。
用简单一点的解释就是将客户端和服务端比作男孩和女孩,用来解释“三次握手”;
如下:
3.为什么要三次握手
因为TCP是可靠的传输层协议,它在传输数据前,会建立双向数据通信通道,当保证双向数据传输的通道没有问题时,才会发送数据,起到保护数据的作用。
4.四次挥手原理
客户端向服务器发送FIN断开请求,服务器接收到此请求后,回复一个ACK。服务器向客户机发送FIN断开请求,客户机收到此请求后,回复一个ACK
5.三次握手握三次,为什么断开要断四次?
TCP建立连接时之所以只需要"三次握手",是因为在第二次"握手"过程中,服务器端发送给客户端的TCP报文是以SYN与ACK作为标志位的。SYN是请求连接标志,表示服务器端同意建立连接;ACK是确认报文,表示告诉客户端,服务器端收到了它的请求报文。
即SYN建立连接报文与ACK确认接收报文是在同一次"握手"当中传输的,所以"三次握手"不多也不少,正好让双方明确彼此信息互通。
数据传输方向是双向的,一个方向的数据通道关闭需要一次请求和一次确认,因此需要断两次,而我们有两个数据方向,因此需要断四次。
6.TCP半关闭状态是什么情况?
客户机向服务器发送了FIN请求,服务器也给予了ACK响应。但是,服务器还有数据需要传输给客户机,因此服务器并没有向客户机立即发送FIN请求。
端口号:
客户端根据需要那种服务,从而发送到特定的目的端口
端口划分为三个类别,其范围介于1到65,535之间。
2、UDP协议(用户数据报协议):
UDP报文的首部格式:
源端口号(16) | 目标端口号(16) |
UDP长度(16) | UDP校验和(16) |
数据报的长度是指包括报头和数据部分在内的总字节数。
UDP协议使用报头中的校验值来保证数据的安全。
UDP协议与TCP协议的区别:
UDP协议:用户数据报协议 | TCP协议:传输控制协议 |
无连接,不可靠的传输协议 | 面向连接,可靠的传输协议 |
花费的开销小 | 分段,重组,重传,滑动窗口 |
传输效率高 | 适用于对可靠性要求较高的场合 |
常用UDP端口号及其功能:
端口 | 协议 | 说明 |
69 | TFTP | 简单文件传输协议 |
111 | RPC | 远程过程调用 |
123 | NTP | 网络时间协议 |
常用TCP端口号及其功能:
端口 | 协议 | 说明 |
21 | FTP | FTP服务器所开放的控制端口 |
23 | TELNET | 用于远程登录,可以远程控制管理目标计算机 |
25 | SMTP | SMTP服务器开放的端口,用于发送邮件 |
80 | HTTP | 超文本传输协议 |
110 | POP3 | 用于邮件的接受 |
总结
- 路由器通过查询表、实现数据包的转发
- 路由表的形成有静态添加和动态学习两种方式
- 静态路由是由管理员手工添加的路由信息
- 默认路由是一种特殊的静态路由