一、功能
定义传输数据的协议端口,以及流控和差错校验
二、协议
传输层有TCP和UDP两大协议
1.TCP协议
TCP协议,即传输控制协议
1.1TCP的特点
1.TCP是面向连接的、可靠的进程到进程通信的协议
2.TCP提供全双工服务,即数据可在同一时间双向传输
3.每一个TCP都有发送缓存和接收缓存,用来临时储存数据
TCP报文段(Segment):
TCP将若干个字节构成一个分组,叫做报文段,封装在IP数据报中
1.2TCP报文段
①序号(seq):当TCP从进程接收数据字节时,对每一个字节进行编号,编号不一定从0开始,一般会产生一个随机数作为第一个字节的编号,当字节都被编上号后,TCP就给每个报文段指派一个序号,序号就是该报文段中第一个字节的编号,当数据到达目的地后,接收端会按照这个序号把数据重新排列,保证数据的正确性
②确认号(Ack): 对发送端的确认信息,用它来告诉发送端这个序号之前的数据段都已经收到,如确认号是X,就是表示前X-1个数据段都已经收到
③控制位:控制位: URG ACK PSH RST SYN FIN, 共6个
URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针
ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段
PSH: push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,尽快将这个报文段交给应用程序,而不是在缓冲区排队
RST: 重连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求
SYN: 同步号,用于建立连接过程,在连接请求中,
SYN= 1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一 个确认,即SYN= 1和ACK=1
FIN: finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流
④窗口大小:说明本地可接收数据段的数目,这个值的大小是可变的,当网络通畅时将这个窗口值变大以加快传输速度,当网络不稳定时减小这个值可保证网络数据的可靠传输,TCP中的流量控制机制就是依靠变化窗口的大小实现的
⑤校验和:用来做差错控制,在发送TCP数据段时,由发送端计算校验和,当到达目的地时又进行一次校验和计算。若这两次的校验和一致,则说明数据基本是正确的,否则将认为该数据已被破坏,接收端将丢弃该数据
1.3TCP的三次握手
客户端向服务器端发出连接请求报文段,服务器端收到请求,同意连接就发出确认报文段,客户端收到服务器端的确认报文端,再次向服务器发送确认报文段,此时TCP连接完成
第一次:客户机向服务器发送建立SYN报文(seq=a,SYN=1),请求与服务器建立连接,此时客户机处于同步已发送状态
第二次:服务器收到客户端的请求,同意建立连接并向客户端发送同意建立连接的SYN+ACK报文(SYN=1,ACK=1,seq=b,Ack=a+1),服务器处于同步收到状态
第三次:客户端收到服务器发来的确认,并向服务器发送ACK报文(seq=a+1,Ack=b+1,ACK=1),此时客户端处于建立连接状态,至此三次握手完成
1.4TCP四次挥手
数据传输结束后,通信双方都可以释放连接 客户端向服务器端发出发出连接释放报文段,停止发送数据, 服务器接收到连接释放报文段,立即发出确认,此时连接处于半关闭状态,若服务器没有向客户端发送的数据,则发出连接释放报文段 客户端收到服务器端发出的连接释放报文段,给予确认。 现在 TCP 连接还没有释放掉。必须经过时间等待计时器设置的时间 2MSL 后,才能断开连接
第一次挥手:客户端向服务器发送一个FIN断开请求,用来关闭客户机到服务端的数据传送,客户机进入FIN_WAIT_1状态
第二次挥手:服务器收到客户机发送的FIN请求后,向其发送一个ACK确认码给客户端,确认序号为收到序号+1,此时服务器进入CLOSE_WAIT状态
第三次挥手:服务器向库户籍发送发送一个FIN断开码,用来关闭服务器到客户机的数据传输,此时服务器进入LAST_ACK状态
第四次挥手: 客户机收到服务器发来的FIN码后,进入TIME_WAIT_2状态,接着发送一个ACK=1给Server,确认序Ack号为收到序号+1,服务器进入CLOSED状态,完成四次挥手
2.UDP协议
UDP协议,即用户数据报协议
2.1UDP的特点
UDP是无连接、不保证可靠性的传输层协议
花费开销小
传输数据速度快
2.1.1TCP,UDP对比
TCP:1、传输控制协议 2、安全稳定3、面向连接网络协议4、全双工UDP:1、用户数据报协议 2、不安全但高效 3、无连接网络协议 4、传输速度快
三常见协议及端口号
1、常见的TCP端口号
FTP 文件传输协议 21(建立连接)/20(传输文件)
TELNET 远程登录 23
SMTP 简单邮件传输协议 25
HTTP 超文本传输协议 80
POP3 邮件传输协议 110
ssh 安全外壳协议 22
DNS 域名解析协议 53
DHCP 动态主机分配协议 67(服务端)/68(用户端) #是基于TCP和UDP协议的端口
2、常见的UDP端口号
TFTP 简单文件传输协议 69
RPC 远程过程调用 111
NTP 网络时间协议 123
HTTPS 加密的超文本传输协议 443
SNMP 简单网络管理协议 161
思考总结
为什么握手是三次,而不是两次或者四次?
两次不安全,四次没必要。tcp通信需要确保双方都具有数据收发的能力,得到ACK响应则认为对方具有数据收发的能力,因此双方都要发送SYN确保对方具有通信的能力。第一次握手是客户端发送SYN,服务端接收,服务端得出客户端的发送能力和服务端的接收能力都正常;第二次握手是服务端发送SYN+ACK,客户端接收,客户端得出客户端发送接收能力正常,服务端发送接收能力也都正常,但是此时服务器并不能确认客户端的接收能力是否正常;第三次握手客户端发送ACK,服务器接收,服务端才能得出客户端发送接收能力正常,服务端自己发送接收能力也都正常。
为什么“握手”是三次,“挥手”却要四次?
TCP建立连接时之所以只需要"三次握手",是因为在第二次"握手"过程中,服务器端发送给客户端的TCP报文是以SYN与ACK作为标志位的。SYN是请求连接标志,表示服务器端同意建立连接;ACK是确认报文,表示告诉客户端,服务器端收到了它的请求报文。即SYN建立连接报文与ACK确认接收报文是在同一次"握手"当中传输的,所以"三次握手"不多也不少,正好让双方明确彼此信息互通。
TCP释放连接时之所以需要“四次挥手”,是因为FIN释放连接报文与ACK确认接收报文是分别由第二次和第三次"握手"传输的。为何建立连接时一起传输,释放连接时却要分开传输?
建立连接时,被动方服务器端结束CLOSED阶段进入“握手”阶段并不需要任何准备,可以直接返回SYN和ACK报文,开始建立连接。释放连接时,被动方服务器,突然收到主动方客户端释放连接的请求时并不能立即释放连接,因为还有必要的数据需要处理,所以服务器先返回ACK确认收到报文,经过CLOSE-WAIT阶段准备好释放连接之后,才能返回FIN释放连接报文。