網(wǎng)絡(luò)層是為主機(jī)之間提供邏輯通信,而運(yùn)輸層為應(yīng)用進(jìn)程之間(socket:ip+端口)提供端到端的邏輯通信。
端口 服務(wù)器使用的端口
系統(tǒng)端口號(hào)/熟知端口號(hào) (0-1023)FTP: 21
TELNET: 23
SMPT: 25
DNS: 53
TFTP: 69
HTTP: 80
SNMP: 161
SNMP(trap): 162
登記端口號(hào) (1024-49151)
客戶端使用的端口號(hào) (49152-65535)
由于這類端口號(hào)僅在客戶進(jìn)程運(yùn)行時(shí)才動(dòng)態(tài)選擇,因此也叫做短暫端口號(hào)
TCP (面向連接,可靠)
socket
socket = (IP地址: 端口號(hào))
每一條TCP連接唯一地被通信兩端的兩個(gè)端點(diǎn)(即兩個(gè)套接字)所確定。
同一個(gè)名詞socket卻可以表示多種不同的意思
允許應(yīng)用程序訪問連網(wǎng)協(xié)議的應(yīng)用編程接口API,即運(yùn)輸層和應(yīng)用層之間的一種接口,稱為socket API,并簡(jiǎn)稱為socket。
socket是在應(yīng)用層和傳輸層之間的一個(gè)抽象層,它把TCP/IP層復(fù)雜的操作抽象為幾個(gè)簡(jiǎn)單的接口供應(yīng)用層調(diào)用已實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)中通信。
更多
在socket API中使用的一個(gè)函數(shù)名也叫做socket。
調(diào)用socket函數(shù)的端點(diǎn)成為socket,如“創(chuàng)建一個(gè)數(shù)據(jù)報(bào)socket”。
調(diào)用socket函數(shù)時(shí),其返回值稱為socket描述符,可簡(jiǎn)稱為socket。
在操作系統(tǒng)內(nèi)核中連網(wǎng)協(xié)議的Berkeley實(shí)現(xiàn),稱為socket實(shí)現(xiàn)。
上面的這些socket的意思都和(IP地址: 端口號(hào))不同。
特點(diǎn)TCP時(shí)面向連接的運(yùn)輸層協(xié)議
每一條TCP連接只能有兩個(gè)端點(diǎn),每一條TCP連接只能時(shí)點(diǎn)對(duì)點(diǎn)的。
TCP提供可靠交付的服務(wù)。
TCP提供全雙工通信。
面向字節(jié)流。TCP中的“流”(stream)指的是流入到進(jìn)程或從進(jìn)程流出的字節(jié)序列。
更多
面向字節(jié)流的含義是:
雖然應(yīng)用程序和TCP的交互是一次一個(gè)數(shù)據(jù)塊(大小不等),但TCP把應(yīng)用程序交下來的數(shù)據(jù)看成僅僅是一連串的無結(jié)構(gòu)的字節(jié)流。TCP不保證接收方應(yīng)用程序所收到的數(shù)據(jù)塊和發(fā)送方應(yīng)用程序所發(fā)出的數(shù)據(jù)塊具有對(duì)應(yīng)大小的關(guān)系(例如,發(fā)送方應(yīng)用程序交給發(fā)送方的TCP共10個(gè)數(shù)據(jù)塊,但接收方的TCP可能只用了4個(gè)數(shù)據(jù)塊就把收到的字節(jié)流交付上層的應(yīng)用程序)。TCP并不關(guān)心應(yīng)用進(jìn)程一次把多長(zhǎng)的報(bào)文發(fā)送到TCP的緩存中,而是根據(jù)對(duì)方給出的窗口值和當(dāng)前網(wǎng)絡(luò)擁塞的程度來決定一個(gè)報(bào)文段應(yīng)包含多少個(gè)字節(jié)(UDP發(fā)送的報(bào)文長(zhǎng)度是應(yīng)用進(jìn)程給出的)。如果應(yīng)用進(jìn)程傳送到TCP緩存的數(shù)據(jù)塊太長(zhǎng),TCP就可以把它劃分短一些再傳送。如果應(yīng)用進(jìn)程一次只發(fā)來一個(gè)字節(jié),TCP也可以等待積累有足夠多的字節(jié)后再構(gòu)成報(bào)文段發(fā)送出去。可靠傳輸?shù)墓ぷ髟?/p>
TCP報(bào)文段的首部格式
TCP可靠傳輸?shù)膶?shí)現(xiàn)
TCP的流量控制
TCP的擁塞控制
TCP的運(yùn)輸連接管理(三次握手四次揮手)


UDP (無連接,不可靠)
用戶數(shù)據(jù)報(bào)協(xié)議UDP只在IP的數(shù)據(jù)報(bào)服務(wù)之上增加了很少的一點(diǎn)功能,這就是復(fù)用和分用的功能以及差錯(cuò)檢測(cè)的功能。
特點(diǎn)
UDP是無連接的
UDP使用盡最大努力交付
UDP是面向報(bào)文的,發(fā)送方的UDP對(duì)應(yīng)用程序交下來的報(bào)文,在添加首部后就向下交付IP層。
UDP對(duì)應(yīng)用層交下來的報(bào)文,既不合并,也不拆分。因此,應(yīng)用程序必須選擇合適大小的報(bào)文。
若報(bào)文太長(zhǎng),UPD把它交給IP層后,IP層在傳送時(shí)可能要進(jìn)行分片,這會(huì)降低IP層的效率。
若報(bào)文太短,UDP把它交給IP層后,會(huì)使IP數(shù)據(jù)報(bào)的首部的相對(duì)長(zhǎng)度太大,這也降低了IP層的效率。
UDP沒有擁塞控制
UDP支持一對(duì)一/一對(duì)多/多對(duì)一和多對(duì)多的交互通信
UDP的首部開銷小,只有8個(gè)字節(jié),比TCP的20個(gè)字節(jié)的首部要短
首部
偽首部(12字節(jié))是用來計(jì)算校驗(yàn)和的。
檢驗(yàn)和
UDP計(jì)算檢驗(yàn)和的方法和計(jì)算IP數(shù)據(jù)報(bào)首部檢驗(yàn)和的方法類似。但不同的是:
IP數(shù)據(jù)報(bào)的檢驗(yàn)和只檢驗(yàn)IP數(shù)據(jù)報(bào)的首部,但UDP的檢驗(yàn)和是把首部和數(shù)據(jù)部分一起都檢驗(yàn)。
UDP的檢驗(yàn)和即檢查了UDP用戶數(shù)據(jù)報(bào)的源端口和目的端口以及UDP用戶數(shù)據(jù)報(bào)的數(shù)據(jù)部分,又檢查了IP數(shù)據(jù)報(bào)的源IP地址和目的地址。
其他
如果接收方UDP發(fā)現(xiàn)收到的報(bào)文中的目的端口不存在對(duì)應(yīng)的應(yīng)用進(jìn)程,就丟棄該報(bào)文,并由網(wǎng)際控制報(bào)文協(xié)議ICMP發(fā)送“端口不可達(dá)”差錯(cuò)報(bào)文給發(fā)送方。
traceroute就是讓發(fā)送的UDP用戶數(shù)據(jù)報(bào)故意使用一個(gè)非法的UDP端口,結(jié)果ICMP就返回“端口不可達(dá)”差錯(cuò)報(bào)文,因而達(dá)到了測(cè)試的目的。






