TCP协议简介

TCP:Transmission Control Protocol 传输控制协议
TCP的三个特性:面向连接、可靠传输、面向字节流

TCP建立通信流程

与DUP的通信流程不同,TCP与其特性对应,通信流程较为复杂,如下图所示
【网络】TCP通信建立过程(图文解析)------------三次握手1.创建套接字:调用socket函数创建文件描述符;
接口:int socket( int domain, int type, int protocol );
domain:地址域类型
type:套接字类型
protocol:协议类型

2.绑定地址:调用bind函数将当前的文件描述符和ip/port绑定在一起。如果这个端口已经被其他进程占用了,就会绑定失败。
接口: int bind( int socket, const struct sockaddr *addr, socklen_t address_len );
socker:套接字描述符
addr:地址信息
address_len:地址信息长度

3.开始监听:调用listen函数,声明套接字处于监听状态,若有新连接到来,链接建立成功后,就会创建一个新的套接字来与这个客户端进行联系。
接口: int listen( int sockfd, int backlog);
sockfd:套接字描述符
backlog: 是未经过处理的连接请求队列可以容纳的最大数目(最大并发连接数)
监听状态下,内核为任何一个给定的监听套接口维护两个队列:
未完成连接队列(未完成三次握手队列):服务器正在等待完成相应的TCP三路握手过程,队列中套接口处于SYN_RCVD状态;
已完成连接队列(已经完成三次握手队列):已完成TCP三路握手过程的客户端对应其中一项,这些套接口都处于ESTABLISHED状态。
当队列中的连接数达到backlog个后,系统收到syn将不再回复syn+ack

4.新建连接:调用accept函数阻塞等待客户端连接到来。
接口:Int accept( int sockfd; struct sockaddr *addr, socklen_t *addrlen);
sockfd:套接字描述符,指获取哪个监听套接字新建的连接
addr:客户端的地址信息
addrlen:地址信息长度

5.发送连接请求
接口:int connect (int sockfd, const struct sockaddr *addr, socklen_t addrlen);
客户器端收到SYN+ACK后会从connect函数中返回,同时应答一个ACK段

相关文章:

  • 2021-04-15
  • 2021-10-01
  • 2022-12-23
  • 2021-04-22
  • 2021-05-28
  • 2021-10-03
  • 2021-12-28
猜你喜欢
  • 2021-12-29
  • 2021-12-28
  • 2022-12-23
  • 2021-08-31
  • 2021-05-30
  • 2021-07-31
  • 2021-04-18
相关资源
相似解决方案