赞
踩
TCP(Transport Control Protocol)是一个传输层协议,提供 Host-To-Host 数据的可靠传输,支持全双工,是一个连接导向的协议。
TCP 提供的是 Host-To-Host 传输,一台主机通过 TCP 发送数据给另一台主机。
这里的主机(Host)是一个抽象的概念,可以是手机、平板、手表等。收发数据的设备都是主机,所以双方是平等的。
端口号:
端口号用于区分应用,TCP 上层有太多的应用,不仅仅有微信,还有QQ、抖音、网易云音乐……因此 TCP 上层的应用层协议使用 TCP 能力的时候,需要告知 TCP 是哪个应用
IP协议:
位于网络层,提供地址到地址的通信(Address-To-Address),但是不负责信号在具体两个设备间传递。
数据链路层:
链路层在两个相邻设备间传递信息。
物理层:
当信号在两个设备间传递的时候,科学家设计出了物理层封装最底层的物理设备、传输介质等,由最下方的物理层提供最底层的传输能力。
连接(Connection):
连接是通信双方的一个约定,目标是让两个在通信的程序之间产生一个默契,保证两个程序都在线,而且尽快地响应对方的请求。
会话(Session):
会话是应用的行为,比如微信里张三和你聊天,那么张三和你建立一个会话。你要和张三聊天,你们创建一个聊天窗口,这个就是会话。你开始 Typing,开始传输数据,你和微信服务器间建立一个连接。如果你们聊一段时间,各自休息了,约定先不要关微信,1 个小时后再回来。那么连接会断开,因为聊天窗口没关,所以会话还在。
在有些系统设计中,会话会自动重连(也就是重新创建连接),或者帮助创建连接。 此外,会话也负责在多次连接中保存状态,比如 HTTP Session 在多次 HTTP 请求(连接)间保持状态(如用户信息)。
会话是应用层的概念,连接是传输层的概念
在任何一个时刻,如果数据只能单向发送,就是单工,所以单工需要至少一条线路。如果在某个时刻数据可以向一个方向传输,也可以向另一个方向反方向传输,而且交替进行,叫作半双工;半双工需要至少 1 条线路。最后,如果任何时刻数据都可以双向收发,这就是全双工,全双工需要大于 1 条线路。
TCP 是一个双工协议,数据任何时候都可以双向传输。这就意味着客户端和服务端可以平等地发送、接收信息。正因为如此,客户端和服务端在 TCP 协议中有一个平等的名词——Host(主机)。
可靠性指数据保证无损传输。如果发送方按照顺序发送,然后数据无序地在网络间传递,就必须有一种算法在接收方将数据恢复原有的顺序。
TCP 协议有这样几个基本操作:
如果一个 Host 主动向另一个 Host 发起连接,称为 SYN(Synchronization),请求同步;
如果一个 Host 主动断开请求,称为 FIN(Finish),请求完成;
如果一个 Host 给另一个 Host 发送数据,称为 PSH(Push),数据推送。
以上 3 种情况,接收方收到数据后,都需要给发送方一个 ACK(Acknowledgement)响应。请求/响应的模型是可靠性的要求,如果一个请求没有响应,发送方可能会认为自己需要重发这个请求。
步骤:
1.客户端发消息给服务端(SYN),即请求同步
2.服务端准备好进行连接
3.服务端针对客户端的 SYN 给一个 ACK
4.服务端发送一个 SYN 给客户端
5.客户端准备就绪
6.客户端给服务端发送一个 ACK
步骤 1 是 1 次握手;
步骤 2 是服务端的准备,不是数据传输,因此不算握手;
步骤 3 和步骤 4,因为是同时发生的,可以合并成一个 SYN-ACK 响应,作为一条数据传递给客户端,因此是第 2 次握手;
步骤 5 不算握手;
步骤 6 是第 3 次握手。
从上面的例子中,可以进一步看出 SYN、ACK、PSH 这些常见的标识位(Flag)在传输中如何表示。
一种思路是为 TCP 协议增加协议头。在协议头中取多个位(bit),其中 SYN、ACK、PSH 都占有 1 个位。比如 SYN 位,1 表示 SYN 开启,0 表示关闭。因此,SYN-ACK 就是 SYN 位和 ACK 位都置 1。这种设计,我们也称为标识(Flag)。标识位是放在 TCP 头部的。
理解
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。