瞭解TCP/IP五層結構(或四層,省略物理層)
TCP/IP結構中,每層有每層不同的職責,每一層都會在下一層所提供的網絡來完成自己的需求
- 應用層: 應用層就是我們所使用的程序工作的層級,用來發送我們要傳輸的
原始數據。 - 傳輸層: 傳輸層用傳輸協議控制信息,保證兩天主機間的數據傳輸
- 網絡層: 負責地址管理與路由選擇,通過ip地址來識別主機,並通過路
由表的方式規劃兩臺主機間的數據傳輸線路 - 數據鏈路層: 負責設備間數據幀的傳輸與識別
- 物理層: 負責光電信號的傳輸,也就是1010001的高低電平
數據包在各層的封裝與分用
數據在傳輸前,會通過tcp每一層結構,而每一層都會對上一層的數據進行封裝
- 應用層數據稱爲,應用數據
- 傳輸層稱爲,數據段
- 網絡層稱爲,數據報
- 數據鏈路層稱爲,數據幀
物理層將上層數據轉換爲光電信息
而數據分用,是將最終的數據傳輸給另一個主機B,主機B自下而上,一層一層拆解,得到原始數據的過程
IP地址與端口
IP地址:爲了在網絡中多個終端中找到我們所要發送數據的目的機器,就需要IP地址來識別唯一一臺主機
端口:爲了識別當前主機的一個線程
IP地址的格式是以uint32_t,也就是無符號的32位整型形式,並以點分十進制表示:如174.168.2.33,每一端最高到255,因爲一個字節8位最多能表示256個十進制數。
端口的格式時以uint16_t,就是無符號16類整型形式,能表示的範圍時0~66535,但有些端口會被已知的服務佔用,如http端口80,https端口443,mysql端口3306,都是已經被佔用而無法被使用的。
既然端口用來指明需要用到的線程,不使用PID的原因是:線程中斷重新啓動時,PID會被重置,不會是原來的PID,所以需要用端口來指明所要用到的線程
爲了方便識別和傳輸,會將目的地址與源地址一起傳送到目的主機
此時會涉及到計算機大小端字節序問題。
小端: 低地址存放低位數據
大端: 低地址存放高位數據
一般網絡字節序都是大端字節序,是網絡通信的標準,
而小端機器進行網絡通信時就需要進行大小端轉換
大小端轉換的接口
ip地址轉換
uint32_t htonl(uint32_t hostl)將主機地址字節序轉換位網絡地址字節序
反過來uint32_t ntohl(uint32_t netl)就是將網絡地址字節序轉換位主機地址字節序
端口轉換 與ip相同,short型
uint16_t htons(uint16_t hosts)將主機端口字節序轉換位網絡端口字節序
反過來uint16_t ntohl(uint16_t nets)就是將網絡端口字節序轉換位主機端口字節序