第五章 运输层(笔试重点,涉及socket编程)
把重中之重放到首位先阐述,即三次握手四次挥手!其他的之后可能单独写一篇针对具体内容,比如TCP报文首部格式的详细学习等。
三次握手:
最初两端TCP都处于CLOSED状态,然后是服务器先创建TCB(传输控制块),服务器进入listen状态,等待客户端发出请求连接。接下来,TCP一开始也做同样的事情->创建TCB,然后,开始了,向服务器发出连接请求报文段,揭开序幕。
1.客户端通过向服务器端发送一个请求报文段,这时首部中的同步位SYN=1,同时选择初始序号seq = x。
2.服务器端收到请求连接报文后,如同意就要向客户端发送确认报文段。此时,SYN = 1,ACK = 1,ack(确认号) = x + 1,同时也为自己选定一个初始序列号seq = y。
3.最后,客户端收到服务端的确认报文后,还需向服务端给出确认。确认报文段ACK = 1,ack = y + 1,seq = x + 1。TCP连接已经建立,客户端进入ESTABLISHED状态,当服务端受到这个ACK的时候,也进入ESTABLISHED状态,即完成三次握手。
四次挥手:
1.客户端发出连接释放报文,并停止发送数据。释放报文首部FIN = 1,序列号seq = u(等于前面已经传送过来的数据的最后一个字节的序号),此时客户端进入FIN-WAIT-1(终止等待1)状态
2.服务器收到连接释放报文,发出确认报文,ACK = 1, ack(确认号) = u + 1,seq = v。此时服务端进入CLOSE-WAIT(关闭等待)状态,并将剩余的数据发送给客户端。
3.客户端收到服务器确认报文后,进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文。
4.服务器将最后数据发送完毕,就向客户端发送连接释放报文,FIN = 1, ack = u + 1, seq = w,服务器进入LAST-ACK(最后确认)状态,等待客户端确认。
5.客户端收到连接释放报文,必须发出确认报文给服务器。ACK = 1,ack = w + 1, seq = u + 1。此时,客户端进入TIME-WAIT(时间等待)状态,此时TCP连接尚未释放,服务器收到客户端的确认报文立即进入CLOSED状态,当客户端等待 2MSL 后未收到回复, 则认为服务器成功关闭, 客户端关闭连接,四次握手结束。
运输层:关键层次之一
要弄清的概念有:
1.运输层为相互通信的应用进程提供逻辑通信
2、端口、套接字的意义
3.无连接的UDP的特点
4.面向连接的TCP的特点
5.在不可靠的网络上实现可靠传输的工作原理,停止等待协议和ARQ协议
6.TCP滑动窗口、流量控制、拥塞控制和连接管理
运输层向上面的应用层提供服务
通信的真正端点并不是主机,而是主机进程
也就是端到端的通信是应用进程之间的通信
运输层有一个重要功能:复用和分用
网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信
运输层最主要的两种不同的运输协议:
面向连接的TCP(传输控制协议)和无连接的UDP(用户数据报协议)
TCP/IP体系中,数据单位叫TCP报文段和UDP用户数据报
UDP在传送数据之前,不需要建立连接,不提供可靠交付
TCP则提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接,TCP提供广播或多播服务。
TCP提供可靠的、面向连接的运输服务,会增大开销
使用UDP和TCP协议的各种应用和应用层协议:(重点记住TCP的)
运输层协议为TCP的应用的应用层协议:
1.电子邮件 SMTP(简单邮件传送协议)
2.远程终端接入 TELNET(远程终端协议)
3.万维网 HTTP(超文本传送协议)
4.文件传送 FTP(文本传送协议)
运输层是UDP的应用的应用层协议:最经典的是DNS(域名系统),DCHP(动态主机配置协议),SNMP(简单网络管理协议)
互联网上的计算机通信采用客户-服务器方式,客户发起通信请求时,必须先知道对方的IP地址和端口号,之前做过的micropython实验有用过socket编程,例如s = socket.socket(),创建套接字后,s.connect((host, port))
其中host就是主机IP地址,port即端口号
熟知端口号(记住TCP的几个):
FTP:21
TELNET:23
SMTP:25
HTTP:80
HTTPS:443(加密的HTTP)
UDP:概述(重点还是TCP)
UDP只在IP的数据报服务之上增加了很少一点功能:即复用分用和差错检测
UDP的主要特点:
1.UDP是无连接的
2.UDP使用尽最大努力交付,而不保证可靠交付
3.UDP是面向报文的
4.UDP没有拥塞控制
5.UDP支持一对一、一对多、多对一、多对多的交互通信
6.UDP的首部开销小,只有8个字节,TCP有20个字节
TCP:(重磅)
TCP的主要特点:
1.TCP是面向连接的运输层协议,应用程序在使用TCP协议之前,必须建立TCP连接,在传送数据完毕后,还要释放已经建立的TCP连接。
2.每一条TCP连接只能是点对点的
3.TCP提供可靠交付的服务
4.TCP提供全双工通信
5.面向字节流:TCP的流指的是流入到进程或从进程流出的字节序列
TCP把连接作为最基本的抽象。
TCP连接的端点叫做套接字(socket)或插口。端口号拼接到IP地址即为套接字,例如(192.3.4.5:80)前面部分是IP地址,80是端口号,这就是一个套接字
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定
可靠传输工作原理:(简述)
TCP发送的TCP报文段交给IP层,然而IP层只能提供尽最大努力交付服务,并不是可靠传输的服务,所以需要停止等待协议来变得可靠!
1.无差错情况,A发送分组,发完暂停,等待B的确认;B接收分组,并发送确认给A;A收到后再发下一个分组。
2.出现差错(超时重传)B接收过程出现差错,但无论如何不会发送任何消息给A,A在经过一段时间 没收到确认消息,就断言刚才的分组丢失,重新发送,这就是超时重传。
3.确认丢失和确认迟到
确认丢失就丢弃重复分组,,再发送确认消息给A
确认迟到,A会收到重复确认,处理方式是收下就丢弃,B仍收到重复分组,丢弃重复分组并重传确认分组
4.信道利用率:
U = TD/(TD + RTT + TA)
其中TD等于分组长度(单位为bit)除以数据率(单位为bit/s),RTT(单位为ms),TA一般都远小于TD,有些忽略不进入计算
TCP利用滑动窗口来实现流量控制
TCP的拥塞控制:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞控制。
TCP的拥塞控制算法:
1.慢开始
2.拥塞避免
3.快重传
4.快恢复