白话网络连接之socket创建

前言
预计我会花一月时间用几篇文章来和大家一起畅游网络知识,概要如下:
1.我们先会从浏览器的工作方式来进行了解,从浏览器中输入URL,接着浏览器去对URL进行解析,然后按照不同的协议去封装请求消息,发送请求,之后浏览器会收到响应消息。
2.我们还会去了解消息数据是如何搬运的,协议栈会将消息打包并交给网卡,然后网卡会将包转为电信号并通过网线发送出去。
3.对于发送到网络的信号数据是如何进入互联网的,这里我们会了解集线器、交换机、路由器等设备,当路由器出发的数据进入互联网后,我们就要了解下网络运营商和互联往中的骨干网。
4.之后网络包数据终于来到了Web服务器所在的局域网中,接着它会遇到防火墙,防火墙会对数据进行检查,有些重复利用的数据包还会遇到缓存服务器,当然在一些大型网站中还会遇到分布式服务器上的负载均衡器等。
5.最终,我们的网络包数据来到了Web服务器,服务器是怎么处理的呢?也是会和客户端类似,也是由操作系统中的协议栈来完成数据解析,最终按照协议中的操作指示来把数据装入响应消息中,发回给客户端。当然回发的过程和前面是正好相反滴。

正片开始:
本篇接着上篇来说,让我们来了解下应用程序时如何通过套接字来通信的。

  • 调用socket
    先来看张图,如下:
    在这里插入图片描述
    创建套接字时首先分配一个套接字所需的内存空间,然后向其写入初始状态。
    创建完套接字后,应用程序就会调用connect,随后,协议栈会将本地的套接字与服务器的套接字进行连接。
    何为“连接”,连接实际上是通信双方交换控制信息,在套接字中记录这些必要的信息兵准备数据收发的一连串操作,这些控制信息字段就是TCP协议中规定的控制信息,如下图我们来看看TCP头部格式:
    在这里插入图片描述
    实际的连接操作,第一步是在TCP模块处创建表示连接控制信息的头部。通过TCP头部中的发送方和接收方端口号可以找到要连接的套接字。

  • 本篇结语
    当控制流从connect回到应用程序后,接下来就进入数据收发阶段了。具体收发操作我们下篇再论。

猜你喜欢

转载自blog.csdn.net/alspd_zhangpan/article/details/107135671