网络协议栈5:connect()函数之前

本文深入解析了Socket编程的基础,包括socket()和bind()函数的作用,以及它们如何在本地创建socket结构体并与I节点、文件句柄结合。此外,还详细解释了connect函数如何通过TCP/IP协议栈创建连接,实现两台计算机之间的数据传输。

 

我们的应用程序在调用了socket()函数,bind()函数之后,只是在本地创建了socket结构体,sock结构体,并把socketsock这两个结构体跟I节点,文件句柄结合起来,在把socket创建时所指定的协议的操作集关联到sock结构体上,用于在socket指定了协议之后,使用这个操作集来完成相关的操作;之后的bind()函数则把本地的一个未被使用的端口号(一般大于1024,因为0~1024是知名端口号,保留下来做已知的特定用途,如端口号不是营养程序指定的,则查找空闲的端口号比较烦),用于表示当前sock所属的进程,并把本地的IP跟绑定到sock上,用于表示数据将从哪里被发送到网络上。

所有这些,都只是在本地完成的,都还没有涉及到诸如传输层、网络层、链路层这些网络协议栈的东西,也没有出现TCP/IP/MAC等的数据,因此,socket/bind两个函数的调用,实际上都只是做一些准备的动作,为创建连接这个动作做好基础工作,即为connect函数的登场准备了舞台

Connect函数则是会创建一个SYN数据,发送到远端的IPconnect函数参数指定),寻求握手,建立链接,此时的SYN信号,就会被TCP/IP/MAC三个数据结构的打包,经过传输层,网络层,链路层直到网路上,传给远端地址,然后在本地等待远端地址的回传信息,一旦远端地址侦听并接收到SYN信号,就会创建一个新的进程,之后进程也会创建一个socketsock等结构体,并把回复的ACK信号经过TCP/IP/MAC三个数据结构的打包,再经过远端的传输层,网络层,链路层传输到远端的网卡上,由远端的网卡发送数据到网路上,因为远端传输的数据的IP地址为本地的IP,经过ARP就能在网络上找到本地的网卡的MAC,进而找到网卡,进而把数据发送到本地端,本地端收到ACK信号后,再回复一个收到ACK信号的信号给远端,则一条链路就建立成功了,如图<tcp三次握手>,以后的数据就都在这条链路上进行传输,而中间经过的路由,则有可能不尽相同,但是两个端点是不变的,其形式大致如图 <网路路由>,因为中间的路由是随时根据网路的情况而调整的,使用ARP技术来达到的。

转载于:https://www.cnblogs.com/image-eye/archive/2012/01/07/2315525.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值