问题:
1.为什么需要TCP连接?
因为TCP连接管理这套机制是以不同五元组描述的通到分别管理的。
2.什么是连接?
抽象层面来说:就是五元组标识的唯一一条通信通道
OS层面来说:就是一个Connection对象,(描述五元组信息+各种管理信息,OS通过List/Map把Connection对象组织起来)
3.Socket和连接的关系?——从应用层代码角度理解
前置知识:理解什么是Socket(套接字)
套接字是OS提供的用于应用层和网络协议栈进行通信的一套标准接口,套接字上会绑定相应的连接,实现通信
代码:ServerSocket s=new ServerSocket(8888);
做了三件事:
1.新建一个Socket
2.绑定了本地IP+本地端口
3.listen(监听)
连接管理
(为什么要有连接管理?)
( 因为TCP的可靠性)
需要有建立连接的过程和销毁连接的过程
1.三次握手建立TCP连接
(1)从TCP协议栈的视角看
SYN:表示想建立连接,进行信息同步(初始序号-ISN的同步)
ACK:确认应答,表示确认之前收到的segment
(2)TCP的状态转移
(3)和应用层结合看
总结:
1.描述三次握手的过程?
a)标志位:SYN+ACK
b)状态转移
c)SN+ASN
d)结合应用层
2.为什么是三次?
a)为什么不是两次?
c发SYN,s回ACK,s发SYN,c回ACK,两次的话不满足确认应答机制。
b)为什么不是四次?
因为s发ACK和s回ACK可以合并,能少次数尽量少,提高效率。
3.建立连接的目的是什么?
a)为什么要有连接?
因为TCP连接管理机制是以不同五元组描述的通道分别管理的。
b)什么是连接?
抽象层面来说:就是五元组标识的唯一一条通信通道
OS层面来说:就是一个Connection对象,(描述五元组信息+各种管理信息,OS通过List/Map把Connection对象组织起来)
c)建立连接是为了同步ISN
d)为什么ISN序列号必须是随机的?如果ISN都是0,是不是就不需要同步了?
如果ISN都是固定的,可能会被伪造的segment进行攻击,要防止网络上的恶意用户。
2.四次挥手释放连接
A结点和B结点(没有客户端和服务器之说)
(1)主动关闭方、被动关闭方、同时关闭方
合并被动关闭方的FIN+ACK,就变成了三次挥手。