TCP三次握手
建立TCP连接是通过三次握手实现的,采用三报文握手主要是为了防止已失效的连接请求报文突然又传送到了,因而产生错误
主动发起TCP连接建立的称为客户端
被动等待的为TCP服务器,二者之间需要交换三个TCP报文段
-
首先是客户端主动发起TCP连接,发送一个TCP报文段,其中的SYN被置为1,一个seq=x序列号,此时客户端进入SYN_SEND状态
-
然后服务端收到tcp报文,如果同意建立连接,则回复一个tcp报文,其中SYN和ACK标志位都为1,序列号seq=y,确认字段ack=x+1,这是对tcp客户进程所选择的序列号seq的确认,此时服务端进入SYN_RECV
-
客户端收到服务端tcp的确认报文后,还要向服务端发送一个普通的tcp,用于确认报文段并已进入建立状态,报文中的ACK为1序列号seq=x+1确认号ack=y+1,服务端收到报文后双方都进入 ESTABLISHED状态
注意:
<1>第一个报文不携带数据,因为规定SYN为1的报文不可以携带数据,但是要消耗一个序列号
<2>最后一个报文可以携带数据,不携带数据不消耗序列号,下一个序列号任然为x+1
被动建立的一方是LISTEN状态
TCP四次挥手
在断开连接前,双方都处于ESTABLISHED,双方都可以主动的断开连接
由于TCP连接是全双工的,因此每个方向都需要单独的断开
-
客户端打算断开连接,想服务端发送一个报文段,其中FIN为1,且发送一个序列号seq=u,之后客户端进入FIN_WAIT_1状态,等待服务端确认
-
服务端收到断开连接报文后,想客户端发送一个应答报文ACK为1,确认号ack=u+1,序列号seq=y,然后服务端进入CLOSE_WAIT状态,进入等待关闭状态,处于半关闭状态(可以接数据或者发送数据,表明还有一种可以再正常工作)
-
服务器也打算断开连接,会向客户端发送断开连接报文,其中FIN为1,ACK为1,序列号seq=x,确认号ack=u+1,此时服务器进入LAST_ACK 状态
-
客户端收到来自服务端的断开连接报文后,向服务端发送ACK应答报文段以及断开连接报文段的确认号ack=x+1,之后客户端进入TIME_WAIT 状态,服务器收到ACK应答报文后,服务器进入CLOSE状态,此时客户端还处于TIME_WAIT状态,此时的tcp连接还未释放,等待2ms后,客户端才进入CLOSE状态
二者之间的存在,保证了数据的可靠传输
拥塞控制和流量控制
拥塞控制(在AB节点之间的所有网络节点之间进行控制)
TCP滑动窗口机制
win=3代表某一方可以发送的数据
窗口大小决定了在收到确认前可以发送的数据量
流量控制(在A、B两个节点之间进行控制)
流量控制:是为了防止发送速度过快,接收方处理不过来,造成丢包现象,导致网络资源浪费
UDP(用户数据报协议)
特点:
-
不可靠传输
-
面向无连接
-
尽力而为的传输
应用:DNS,视频应用
相比于TCP,UDP的报文开销减少很多,只是有简单的端口寻址功能
端口号:应用程序之间进行通信时的
源端口:随机分配的,一般 >1024 目的端口:具体到常用的端口号(如telnet 23 、DNS 53等)
常见的端口及协议分布层
-
物理层和数据链路层
-
802.3 以太网
-
802 局域网
-
802.11 WIFI
-
-
网络层
-
ICMP 控制报文协议 端口号:1
-
IGMP Internet组管理协议 2
-
ESP 安全封装协议 50
-
AH 认证头协议 51
-
EIGRP 增强IGRP路由协议 88
-
OSPF 开放式最短路径优先 89
-
ISIS 中间系统到中间系统 124
-
VRRP 虚拟路由冗余协议
-
-
传输层(TCP,UDP)
-
应用层(分为TCP层面,UDP层面)
TCP层面的协议(常用的)
UDP层面的协议(常用的)
邮件三剑客:
-
SMTP 25
-
POP3 110
-
IMAP 143
汇总: