一、TCP和UDP(传输层协议)
1、TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网间协议),是一个工业标准协议集,是为广域网(WAN)设计的。
2、UDP(User Data Protocol,用户数据报协议),不可靠传输,无需连接。
3、区别
1)基于连接与无连接
2)TCP要求系统资源较多,UDP较少
3)UDP程序结构较简单
4)字节流模式(TCP)与数据报模式(UDP)
5)TCP保证数据正确性,UDP可能丢包
6)TCP保证数据顺序,UDP不保证
7)TCP是点对点,UDP是一对一,一对多,多对一,多对多交互通信
8)TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
二、TCP/IP协议族
TCP/IP协议族包括传输层、网络层、链路层,UDP是TCP/IP协议族中的一种。
三、socket(套接字)
socket是应用层与TCP/IP协议族的中间抽象接口,将复杂的TCP/IP通信过程隐藏在socket后面,应用层通过接口去进行指定协议的通讯。
(图出处https://www.cnblogs.com/wangcq/p/3520400.html)
四、基于TCP的socket通信
(图出处https://www.cnblogs.com/wangcq/p/3520400.html)
五、TCP的三次握手四次挥手
SYN:建立连接;ACK:收到消息确认;FIN: 关闭连接
握手是由客户端发出的,挥手可由客户端发起,也可由服务端发起;过程中ACK始终都是+1发出的
1、三次握手
1)客户端向服务端发送建立连接请求,SYN J;
2)服务端收到客户端请求之后响应确认信息,ACK J+1,并发出建立连接请求,SYN K;
3)客户端收到服务端消息之后,响应确认信息,ACK K+1
至此,握手成功。
(图出处https://blog.csdn.net/qq_38950316/article/details/81087809)
2、四次挥手
1)客户端向服务端发送关闭连接请求,FIN M,此时客户端置于等待状态,FIN_WAIT_1;
2)服务端收到客户端请求之后响应确认信息,ACK M+1,此时客户端切换等待状态,FIN_WAIT_2;
3)服务端接受完数据,向客户端发送关闭连接请求,FIN N;
4)客户端收到服务端的请求之后,响应确认信息,ACK N+1,此时客户端切换等待状态,TIME_WAIT;
5)此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态
图出处(https://blog.csdn.net/qq_38950316/article/details/81087809)
3、为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
参考链接:
https://www.cnblogs.com/wangcq/p/3520400.html
https://blog.csdn.net/m_xiaoer/article/details/72885418