传输层简介
TCP三次握手
TCP四次挥手
为啥是三次握手,而是四次挥手呢?
传输层简介
1)引入传输层的原因:
- 消除网络的不可靠性(虽然IP协议之外又加了ICMP等协议来弥补IP的不可靠性,但还是远远不够的)
- 向上层(应用层)屏蔽通信子网的实现细节
- 弥补上层(应用层)提出的要求与下层(网络层等)提供的服务的差异
2)传输层的功能:
- 传输层提供了进程级的访问能力,实际上两个主机之间的通信就是两个进程之间的通信,这种通信也叫端到端(end-to-end)的通信
- 实现分用与复用。不同端口之间的应用(像Http是80,Telnet是23等),通过复用网络层的一条连接来进行多种进程的数据传输。
- 流量控制与缓冲管理。当接收端与发送端的速度不匹配的时候,就会采用缓冲机制。如下图管理方式
动态分配缓冲区
ACK +序号 表示,在序号之前的所有报文都已收到。
BUF + 数字。现在可用多个个buf。
上层的主机A与主机B这就代表应用层的实体,底层就是使用的网络层,中间层就是运输层。运输层与应用层之间的接口就是端口号,通过运输实体,来进行两个主机之间的通信。TSAP是传输层服务访问点的意思。NSAP就是网络层的服务访问点,网络层与运输层之间的接口应该就是IP地址~
3)常用端口号
应用层协议 |
网络应用 |
常用端口号 |
SMTP |
电子邮件发送 |
25 |
POP |
电子邮件接收 |
110 |
FTP |
远程文件传输 |
20,21.(serv_u:2121) |
Telnet |
虚终端 |
23 |
HTTP |
Web服务 |
80(自定义的8080) |
DNS |
域名解析 |
53 |
SNMP |
网络管理 |
161,162 |
比如说远方的客户要服务程序的TSAP用什么办法呢?
- 预先约定,广为人知,像上面表格中的~
- 从名字服务器(name server)或目录服务器(directory server)获得TSAP
TCP三次握手
非常经典的三次握手:
访问www.google.cn,通过wireshark抓包得到:
从图可知,前三次是TCP握手建立连接,第四次才是HTTP协议。这也可以说明,HTTP是使用TCP可靠传输方式的。
结合上面两张图,分析下这三次握手:
1、从客户端192.168.0.105向服务端203.208.46.176发出一个建立连接的请求。标志位是:SYN,和一个发送序列号seq=0。这个SYN我理解为当接收方看到SYN的时候,就知道我是来建立连接的;这时,客户端进入等待确定状态。
2、此时服务端收到客户端的SYN;然后,服务端203.208.16.176向客户192.168.0.105返回一个建立连接的确认信息。标志位有SYN和ACK。这里ACK我理解为,我已经收到你的请求了,现在来确定一下是不是你想建立请求,所以对第一步的seq=0进行加一处理,返回确定号ack=seq+1=0+1=1;这里的就好像对客户端说,已知道你想建立请求,且可以建立。服务端也会产生一个发送序列号seq=0;此时服务端进入SYN_RECV阶段。
3、此时的客户端收到服务端发来的SYN+ACK后。然后客户端192.168.0.105向服务端203.208.46.176再进一步的确定。标志位ACK。确认号ack=seq+1=0+1=1;发送序列seq=1;
通过以上三步就可以确定连接已经建立起来了,然后就进行下一步的传输。
TCP四次挥手
1、203.208.46.176向192.168.0.105发送断开信号。标志位:FIN,ACK;序号seq=45683;意思是,给192.168.0.105说数据传完了,我要关闭连接(此时只是不发送数据,但可接收)
2、192.168.0.105回应203.208.46.17。标志位:ACK;确定号ack=seq+1=45683+1=45684;序号seq=2031;意思是:给203.208.46.17说,好的,我知道了(你的数据发完了,但我可能还有数据没发给你)
3、192.168.0.105又回应203.208.46.17。标志位:FIN,ACK。意思是:同时也告知203.208.46.17我也关闭了
4、203.208.46.176向192.168.0.105。原定情况下,标志位应该是ACK,确定关闭信息。但这里出现的是RST,表示连接重置。不太懂~~
为啥是三次握手,而是四次挥手呢?
因为在挥手的过程中,比如说,服务端要断开连接,说明服务端的数据发送完了。这不代表客户端数据发完。这时的服务端不发送数据,但是可以接收数据,是半关闭状态。等到客户端发送FIN时,才代表客户端这边数据也发送完了,这时才可以正式的断开连接。