TCP建连过程详解/160805

本文详细解析TCP连接建立的过程,包括状态变迁图、接口层代码、结构体和系统调用。通过服务器和客户端的代码示例,展示了TCP三次握手的系统调用流程,并探讨了在不同状态下的意义,如LISTEN状态的重要性。
摘要由CSDN通过智能技术生成

jehol.liuyang


本文仅涉及对基本的建连过程的讨论,同时打开、建连失败处理等异常流程均不涉及,后期有时间会逐步完善;
另外,因时间仓促,加之能力有限,文章错误之处在所难免,敬请批评指正

TCP建连状态机

TCP建立过程就是相互发送信息,驱动客户端、服务器状态变化至于稳定可通信状态的过程,我们先给出状态变迁图,后面的论述都将围绕此展开

这里写图片描述
图1.TCP状态变迁图

接口层代码

我们日常应用TCP协议都是通过调用接口层的系统调用完成的,下面摘录了两段服务器和客户端建立TCP连接的代码,我们主要关注建立连接部分(其他部分被省略了),接下来将通过代码中的系统调用深入内核代码去看看TCP三次握手背后的逻辑

int main(int argc, char *argv[])  
{  
    int server_sockfd;//服务器端套接字  
    int client_sockfd;//客户端套接字  
    int len;  
    struct sockaddr_in my_addr;   //服务器网络地址结构体  
    struct sockaddr_in remote_addr; //客户端网络地址结构体  
    int sin_size;  
    char buf[BUFSIZ];  //数据传送的缓冲区  
    memset(&my_addr,0,sizeof(my_addr)); //数据初始化--清零  
    my_addr.sin_family=AF_INET; //设置为IP通信  
    my_addr.sin_addr.s_addr=INADDR_ANY;//服务器IP地址--允许连接到所有本地地址上  
    my_addr.sin_port=htons(8000); //服务器端口号
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值