日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络协议栈11:Connect函数分解之TCP层

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络协议栈11:Connect函数分解之TCP层 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Connect函數之分解1.

首先,connect函數從參數獲得遠端的IP,把這個地址賦值給對應的sock結構體的對應變量,并設置了sock結構體中的一些其他變量后,首先分配(skb_buff+用戶空間)大小內存,這兩部分是通過調用kmalloc(sizeof(struct skb_buff)+size,priority)來分配的,分配后兩個數據塊是連續的地址;分配后的內存如下

?

接下來,就是初始化這個剛剛分配好的skb_buff結構體的一些指針成員,之后,把整個數據空間的首地址返回給一個skb_buff指針,以后對skb結構體的操作,就通過這個指針來完成了。接著,把skb_buff跟sock關聯起來,即把skb_buff的成員sk設置為對應的sock,路由指向本地路由,就開始配置通信數據了。

?

第一步,把指針指向skb_buff空間的數據空間,即skb_buff的成員data所指向的地址(上圖 5)。

第二步(上圖 1),設置以太網頭部(本地MAC地址6字節+遠端MAC地址6字節+數據幀類型2字節),把本地MAC地址復制到數據空間的開始處,本地的MAC地址,是從本地路由中獲得,而目的MAC地址一般為NULL,如果為NULL,則需要設置skb_buff成員arp為0,表示遠端MAC地址(或者下一跳MAC地址)并不知道,需要在發送數據之前使用ARP來查找,數據幀可以選擇:

#define ETH_P_LOOP? 0x0060?????????? /* Ethernet Loopback packet? */

#define ETH_P_ECHO? 0x0200?????????? /* Ethernet Echo packet??????? */

#define ETH_P_PUP???? 0x0400?????????? /* Xerox PUP packet??????????? */

#define ETH_P_IP 0x0800?????????? /* Internet Protocol packet??? */

#define ETH_P_ARP???? 0x0806?????????? /* Address Resolution packet */

#define ETH_P_RARP????? 0x8035????????? /* Reverse Addr Res packet?? */

#define ETH_P_X25???? 0x0805?????????? /* CCITT X.25???????????????????? */

#define ETH_P_ATALK 0x809B????????? /* Appletalk DDP????????? */

#define ETH_P_IPX????? 0x8137?????????? /* IPX over DIX????????????????? */

#define ETH_P_802_3?? 0x0001?????????? /* Dummy type for 802.3 frames? */

#define ETH_P_AX25?? 0x0002?????????? /* Dummy protocol id for AX.25? */

#define ETH_P_ALL???? 0x0003?????????? /* Every packet (be careful!!!) */

#define ETH_P_802_2?? 0x0004?????????? /* 802.2 frames ?????????? */

#define ETH_P_SNAP? 0x0005?????????? /* Internal only???????????? */

?

第三步,指針跳過以太網首部14字節,指向IP首部(上圖 2),跟著就是數據空間初始化IP首部,IP首部的數據基本上在sock結構體中都有用,現在只是從sock結構體復制過來,初始化完后,在skb_buff中還有一個專門的指針指向數據空間的IP首部的地址的成員ip_hdr,此時也初始化一下。

?

第四步,指針跳過IP首部,指向TCP首部(上圖 3),跟著初始化數據空間的tcp首部,tcp首部一些是從sock結構體中復制的,一些是在這里第一次被賦值的,注意tcp首部不包含tcp選項部分,因此,需要把指針跳過tcp首部后,指向tcp的選項部分,進行初始化,才算把tcp初始化完成(把MSS賦值到選項部分)(上圖 4)。

?

到此,我們就把數據空間初始化完,我們在開始時分配數據空間大小為44+18,現在使用的是14(MAC)+20(TCP)+20(IP)+4(MSS),也就用完了,從這里,我們看到,connect函數發送的數據,都是本地的一些信息,包裝到MAC,TCP,IP等結構體中,目的是告知遠端本地的一些情況的信息,以后通信時,就按照現在發送的規格進行了,而真正的數據部分是沒有的。

?

最后,就是把數據發送的網絡層,進行排隊了。

轉載于:https://www.cnblogs.com/image-eye/archive/2012/01/11/2319798.html

總結

以上是生活随笔為你收集整理的网络协议栈11:Connect函数分解之TCP层的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久久久国产精品 | 亚洲一区 在线播放 | 99久久精品国产一区二区三区 | 老鸭窝一区二区 | 国产欧美精品一区二区三区 | 亚洲精品影院在线 | 久久激情综合网 | 久久精品天天中文字幕人妻 | 奇米影视亚洲春色 | 无码人妻久久一区二区三区 | 白浆影院 | 亚州国产精品 | 日本在线加勒比 | 88av在线播放| 99在线精品视频免费观看20 | 成人无码av片在线观看 | 国产寡妇亲子伦一区二区三区四区 | 女同hd系列中文字幕 | 久久久久久国产 | 国产女人18毛片水18精 | 69精品无码成人久久久久久 | 久久久久久无码精品大片 | 理论片中文字幕 | 韩日成人| 青娱乐国产在线 | 国产精品久久一区二区三区 | 五月久久| 嫩草研究院在线 | 女人18毛片水真多18精品 | 黄色国产一级 | 色www亚洲国产阿娇yao | 在线观看亚洲欧美 | 一级黄色片片 | 福利在线视频观看 | 综合国产视频 | 亚洲精品成av人片天堂无码 | 久久亚洲综合色图 | 亚洲字幕av一区二区三区四区 | 国产欧美激情 | av电影一区二区 | 国产精品视频一区二区三区不卡 | 国产专区在线 | 182tv午夜福利在线观看 | 黑人一级女人全片 | 奇米97| 制服 丝袜 激情 欧洲 亚洲 | 911国产视频 | 四虎影视免费看 | 就爱操av| 久久久在线观看 | 午夜色片 | 亚洲欧美在线视频观看 | 国产精品2019| 91国在线视频 | 二级毛片 | 6080午夜| 手机av免费看 | 韩国伦理片在线看 | 嫩草网站在线观看 | 亚洲大胆视频 | 免费成人电影在线观看 | 激情小视频 | 综合久久网 | 亚洲精品日韩综合观看成人91 | 91蜜桃传媒精品久久久一区二区 | 日本亚洲最大的色成网站www | 国产激情无码一区二区三区 | av黄色免费网站 | 久久精品成人一区二区三区蜜臀 | 精品探花| 成人视品 | 日韩经典一区二区三区 | 亚洲一区二区三区在线播放 | 337p亚洲欧洲色噜噜噜 | 成人在线精品 | 日韩网站在线播放 | 欧美久久久久久久 | 亚洲成人第一区 | 国产高清久久久 | 国产精品久久av无码一区二区 | 性午夜 | 久久久久久久久久久久久久 | 国产精品久久久久电影 | 色人阁网站 | 亚洲精品久久久蜜桃 | 亚洲狠狠 | 播放黄色一级片 | 人人超碰人人 | av成人亚洲 | 成人短视频在线观看 | 性欧美丰满熟妇xxxx性久久久 | 日本免费一二三区 | 黄色小网站在线观看 | 成人免费毛片免费 | 亚洲欧美日韩天堂 | 人妻一区二区三区四区五区 | 国产三级做爰高清在线 | 国产激情视频在线 | 伊人色爱 |