linux内核实现tcp,Linux内核源代码解析——TCP连接的建立

Jack:一个TCP连接是如何建立的呢?

我:通过三次握手建立的。

Jack:“三次握手”这种说法只要有TCP常识的人都知道,从内核实现上,它是怎么实现的呢?

我:你需要弄明白两点。1、你要建立的是“TCP的连接”而不是“连接”。2、三次握手里的syn、ack、seq等到底是什么。

Jack:TCP连接和连接有区别吗?

我:有区别的。从代码层来说,只要调用了socket和bind,就建立好了一条通路(而不是连接)。也就是说,只要使用了socket和bind调用,客户端就可以把数据发送过来了(如果发送不过来,TCP连接建立就无从谈起了)。但是这条通路是不具备任何“容错处理能力”的,也就是说,数据的传输和你预期的是否一样,只能看马克思的心情好不好。

Jack:那syn、ack、seq?

我:你知道三次握手里发送的syn包、syn+ack包、ack包是什么东西吗?

Jack:这个网络教材上不是都有讲解吗?

我:你不要看意淫的教材,你就说说你自己的理解或者是代码的实现。

Jack:。。。

我:syn包就是一个syn字段被置为1的TCP段,它只是把这个段的syn标志设为1,而没有来自用户的数据,数据是空的。syn段的生产组装过程是在内核里完成的,这个过程和用户数据没有半点关系。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值