【网络】TCP通信建立过程(图文解析)------------三次握手

TCP协议简介

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

TCP建立通信流程

与DUP的通信流程不同,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段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值