前言:
最重要的网络层我们已经学习完了,下面让我们再往上一层,对网络层的上一层传输层进行一个学习与了解,学习网络层的基本概念和网络层中的TCP协议和UDP协议
目录
编辑一、传输层的概述:
1.传输层:
2.端口号:
二、传输层的两个重要协议
1.TCP
(1)传输控制协议 :TCP
(2)TCP的主要特点是:
(3)窗口:
(4)TCP的三次握手和四次挥手
2.UDP
(1)用户数据报协议 :UDP
(2)UDP的主要特点是:
(3)UDP首部的概念
传输层提供端到端服务
从通信和信息处理的角度看,传输层向上层应用层提供通信服务。
所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号。
俩个客户端qq与wx的消息传递过程
FTP:21 (20)* :FTP(文件传输协议),21连接;20传输数据
TELNET:23*:TELNET(远程登录)
SMTP:25*:SMTP(电子邮件传输协议),POP3(邮局协议版本3) :110
DNS:53*:DNS(域名系统)
TFTP:69:TFTP(简单文件传输协议)
HTTP:80*:HTTP(超文本传输协议)
SNMP:161:SNMP(简单网络管理协议)
HTTPS:443*:HTTPS(超文本传输安全协议)
TCP是TCP/IP体系中较为复杂的协议,是传输层中最重要的协议。
(1).TCP是面向连接的传输层协议
(2).TCP提供可靠的交付服务
(3).TCP提供全双工通信
(4).TCP是面向字节流
(1).固定窗口:如果窗口过小,当传输比较大的数据的时候需要不停的对数据进行确认,这个时候就会造成很大的延迟。
(2).滑动窗口:滑动窗口通俗来讲就是一种流量控制技术。它本质上是描述接收方的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据,如果发送方收到接收方的窗口大小为0的TCP数据报,那么发送方将停止发送数据,等到接收方发送窗口大小不为0的数据报的到来。
(3).拥塞处理和流量控制
三次握手:
三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号并为后面的可靠性传送做准备。
第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN。此时客户端处于 SYN_SENT 状态。
(首部的同步位SYN=1,初始序号seq=client_isn,SYN=1的报文段不能携带数据,但要消耗掉一个序号。)
第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN。同时会把客户端的 ISN + 1 作为ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_RCVD 的状态。
(在确认报文段中SYN=1,ACK=1,确认号ack=client_isn+1,初始序号seq=server_isn。)
第三次握手:客户端收到 SYNACK 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了连接。
(确认报文段SYN=0,ACK=1,确认号ack=server_isn+1,序号seq=client_isn+1(初始为seq=client_isn,第一个报文段消耗了一个序号,所以第二个报文段要+1),此时ACK报文段可以携带数据,不携带数据则不消耗序号。)
四次挥手:
建立一个连接需要三次握手,而终止一个连接要经过四次挥手,这是由TCP的半关闭(half-close)造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。
TCP 连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),客户端或服务端均可主动发起挥手动作。
第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT1 状态。
(发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据(此时客户端仍然能够接收从服务器传输过来的数据,同时注意这里不发送的是正常连接时传输的数据,而不是一切数据,所以客户端仍然能够发送ACK确认报文),主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。)
第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。
(服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段。此时服务端开始准备释放服务端到客户端方向上的连接。)
第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样发送 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。(服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端的确认。此时服务端停止在服务端到客户端的方向上发送数据,但是服务器端仍然能够接收从客户端传输过来的数据。)
第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。
(客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。)
UDP是在IP数据报服务之上增加了一些功能,增加了复用和分用的功能以及差错检测的功能
1.UDP是无连接的
2.UDP尽最大努力交付
3.UDP面向报文且没有拥塞控制
4.UDP开销较小传输效率较高
UDP协议首部格式
UDP首部有8个字节,由4个字段构成,每个字段都是两个字节
1. 源端口号 : 可有可无,需要对方回信时选用,不需要时全部置0。
2. 目的端口号 :必须有,在终点交付报文的时候需要用到。
3. 长度 :UDP的数据报的长度(包括首部和数据)其最小值为8字节(只有首部)。
4. 校验和 :检测UDP数据报在传输中是否有错,有错则丢弃。 该字段是可选的,当源主机不想计算校验和,则直接令该字段全为0。
当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口,上交给应用进程。 如果接收方UDP发现收到的报文中的目的端口号不正确(不存在对应端口号的应用进程0,),就丢弃该报文,并由ICMP发送“端口不可达”差错报文给对方。