第二章-用电信号传输TCP/IP数据-探索协议栈和网卡

TCP/IP采用分层结构,上层委托下层:


图片发自简书App

浏览器邮件等一般应用程序收发数据时使用TCP,DNS查询等收发较短的控制数据时使用UDP。

协议栈的下半部分是IP协议,IP协议控制网络包收发操作的部分,在互联网上传输数据时,数据会被切分成一个个的网络包,而将网络包发送给通信对象的操作就是由IP来完成。IP中还包括ICMP协议和ARP协议,ICMP:用于告知网络包传送过程中产生的错误以及各种控制信息,ARP用于根据IP地址查询相应的以太网MAC地址。

套接字的实体就是通信控制信息

协议栈在执行操作时会参阅这些控制信息。协议栈是根据套接字中记录的控制信息来工作的。


图片发自简书App

调用Socket时的操作

  1. 申请创建套接字。
  2. 协议栈会分配用于存放套接字的所需的内存空间。


    图片发自简书App
创建套接字时,首先分配一个套接字所需的内存空间,然后向其写入初始状态。

连接服务器

套接字刚创建完成的时候,里面并没有存放任何数据,也不知道到通信对象是谁。

因此,我们需要把服务器的IP地址和端口号等信息告知协议栈,这是连接的操作目的之一

服务器不知道要跟谁通信,因此需要让客户端向服务器告知必要的信息。

因此,客户端向服务器传达开始通信的请求,也是连接操作的目的目的之一

连接实际上是通信双方交换控制信息。当执行数据收发操作时,还需要一块用来临时存储要收发的数据的内存空间,这块内存空间称为缓冲区。

图片发自简书App
应用程序传递来的信息以及从通信对象接收到的信息都会保存在套接字中
图片发自简书App

通信操作中使用的控制信息分为两类:

头部中记录的信息(如:TCP头部)
套接字中记录的信息 (如:IP地址和端口号)

连接操作的实际过程

这个过程是从App调用Socket库的connect开始。

connect (<描述符>,<服务器IP地址和端口号>)

接下来,这些信息传递给协议栈中的TCP模块,然后,TCP模块会与该服务器的TCP模块交换控制信息:

  1. 客户端创建一个包含开始数据收发操作的控制信息的头部。头部包含很多字段,这里重点关注发送方和接收方的端口号,然后将SYN比特设置为1。此外还需设置适当的序号和窗口大小。
  2. 当TCP头部创建好之后,接下来TCP模块会将信息传递给IP模块并委托它发送。
  3. 服务器的IP模块接收到后,将数据传递给TCP模块。服务器的TCP模块根据TCP的头部信息找到端口号对应的套接字,找到之后,在套接字中写入相应信息,并将状态改为正在连接。
  4. 上述操作完成后,服务器会返回响应。整个过程和客户端一样(发送方和接收方的端口号,然后将SYN比特设置为1),除此之外,还需将ACK标志位设置为1,表示已接收到网络包。(如果因为某些原因服务器不接受连接,那么将不设置SYN,而是将RST设置为1)
  5. 然后网络包返回到客户端,如果SYN为1,表示连接成功,这时会向套接字中写入服务器的IP地址和端口号等信息,同时将状态设为连接完毕。
  6. 到这里客户端的操作已经完成。(其实还剩下最后一个步骤,客户端将ACK设为1并发回给服务器,告诉服务器刚才的响应包已收到)。当服务器收到这个返回包时,连接操作才算全部完成。

建立连接之后,协议栈的连接操作就结束了,也就是说connect操作执行完毕,控制流程交给App

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356