概述
從IP層看,通信雙方是兩個(gè)主機(jī)。
但真正進(jìn)行通信的實(shí)體是在主機(jī)中的進(jìn)程,是這個(gè)主機(jī)中的一個(gè)進(jìn)程和另一個(gè)主機(jī)中的一個(gè)進(jìn)程在交換數(shù)據(jù)。
所以嚴(yán)格的講,兩個(gè)主機(jī)進(jìn)行通信就是兩個(gè)主機(jī)中的應(yīng)用進(jìn)程互相通信。
IP協(xié)議能把分組送到主機(jī),但分組還停留在主機(jī)的網(wǎng)絡(luò)層而沒(méi)有交付給主機(jī)中的應(yīng)用進(jìn)程。
從運(yùn)輸層看,通信的真正端點(diǎn)并不是主機(jī)而是主機(jī)中的進(jìn)程。即,端到端的通信是應(yīng)用進(jìn)程之間的通信。在一個(gè)主機(jī)中經(jīng)常有多個(gè)應(yīng)用進(jìn)程同時(shí)分別和另一個(gè)主機(jī)中的多個(gè)應(yīng)用進(jìn)程通信。
運(yùn)輸層的重要功能:
- 復(fù)用:在發(fā)送方不同的應(yīng)用進(jìn)程都有可以使用同一個(gè)運(yùn)輸層協(xié)議傳送數(shù)據(jù)
- 分用:接收方的運(yùn)輸層在剝?nèi)?bào)文的首部后能夠把這些數(shù)據(jù)正確交付到目的應(yīng)用進(jìn)程
協(xié)議
兩個(gè)主要協(xié)議:
- 用戶數(shù)據(jù)報(bào)協(xié)議UDP(User Datagram Protocol) | RFC 768 | UDP用戶數(shù)據(jù)報(bào)
- 傳輸控制協(xié)議TCP(Transmission Control Protocol) | RFC 793 | TCP報(bào)文段
UDP在傳送數(shù)據(jù)之前不需要先建立連接,遠(yuǎn)程主機(jī)的運(yùn)輸層收到UDP報(bào)文后,不需要給出任何確認(rèn)。
TCP提供面向連接的服務(wù)。在傳送數(shù)據(jù)之前必須先建立連接,數(shù)據(jù)傳送結(jié)束后要釋放連接。TCP不提供廣播或多播服務(wù)。
一些應(yīng)用和應(yīng)用層協(xié)議主要使用的運(yùn)輸層協(xié)議:
運(yùn)輸層的端口
因特網(wǎng)上使用的計(jì)算機(jī)的操作系統(tǒng)種類(lèi)很多,不同的操作系統(tǒng)又使用不同格式的進(jìn)程標(biāo)識(shí)符。為了使運(yùn)行不同操作系統(tǒng)的計(jì)算機(jī)的應(yīng)用進(jìn)程能夠互相通信,必須使用統(tǒng)一的方法對(duì)TCP/IP體系的應(yīng)用進(jìn)程進(jìn)行標(biāo)志,這種方法必須與特定操作系統(tǒng)無(wú)關(guān)。
但把一個(gè)特定機(jī)器上運(yùn)行的特定進(jìn)程指明為因特網(wǎng)上通信最后的終點(diǎn)還是不可行的。這是因?yàn)檫M(jìn)程的創(chuàng)建和撤銷(xiāo)都是動(dòng)態(tài)的,通信的一方幾乎無(wú)法識(shí)別對(duì)方機(jī)器上的進(jìn)程。
另外,往往需要利用目的主機(jī)提供的功能來(lái)識(shí)別終點(diǎn),而不需要知道具體實(shí)現(xiàn)這個(gè)功能的進(jìn)程是哪一個(gè)。
解決方法是在運(yùn)輸層使用協(xié)議端口號(hào),簡(jiǎn)稱(chēng)為端口(port)。也就是說(shuō),雖然通信的終點(diǎn)是應(yīng)用進(jìn)程,但只要把傳送的報(bào)文交到目的主機(jī)的某一個(gè)合適的目的端口,剩下的工作就由TCP來(lái)完成。
TCP/IP的運(yùn)輸層用一個(gè)16位端口號(hào)來(lái)標(biāo)志一個(gè)端口。端口號(hào)只具有本地意義,只是為了標(biāo)志本計(jì)算機(jī)應(yīng)用層中的各個(gè)進(jìn)程在運(yùn)輸層交互時(shí)的層間接口。在因特網(wǎng)的不同計(jì)算機(jī)中,相同的端口號(hào)是沒(méi)有關(guān)聯(lián)的。16位的端口號(hào)可允許有65535個(gè)不同的端口號(hào)。
兩個(gè)計(jì)算機(jī)中的進(jìn)程互相通信,不僅需要對(duì)方的IP地址,還需要知道對(duì)方的端口號(hào)。
因特網(wǎng)上的計(jì)算機(jī)通信是采用客戶-服務(wù)器方式,客戶在發(fā)起通信請(qǐng)求時(shí),必須知道對(duì)方服務(wù)器的IP地址和端口號(hào)。運(yùn)輸層的端口號(hào)分為兩大類(lèi):
1、服務(wù)器端使用的端口號(hào):又分為兩類(lèi)
- 熟知端口號(hào)或系統(tǒng)端口號(hào),數(shù)值0~1023,可在www.iana.org查到,指派給TCP/IP最重要的應(yīng)用程序,讓所有的用戶都知道。
- 登記端口號(hào),數(shù)值1024~49151。 是為沒(méi)有熟知端口號(hào)的應(yīng)用程序使用的。這類(lèi)必須在IANA登記,以防止重復(fù)。
2、客戶端使用的端口號(hào),數(shù)值1024~65535。這類(lèi)端口號(hào)僅在客戶進(jìn)程運(yùn)行時(shí)動(dòng)態(tài)選擇,又叫短暫端口號(hào)。通信結(jié)束就不存在了。
UDP
在IP之上增加很少的功能:
- 復(fù)用
- 分用
- 差錯(cuò)檢測(cè)
主要特點(diǎn):
- 無(wú)連接,減少了開(kāi)銷(xiāo)和發(fā)送數(shù)據(jù)之前的時(shí)延
- 盡最大努力交付,即不保證可靠交付
- 面向報(bào)文,發(fā)送發(fā)的UDP對(duì)應(yīng)用程序交下來(lái)的報(bào)文,添加首部后就向下交付給IP層。既不合并,也不拆分,保留這些報(bào)文的邊界。
- 無(wú)擁塞控制
- 支持一對(duì)一、一對(duì)多、多對(duì)一、多對(duì)多交互通信
- 首部開(kāi)銷(xiāo)小,只有8字節(jié),TCP有20字節(jié)
首部格式
數(shù)據(jù)字段和首部字段
首部字段由四個(gè)字段組成,每個(gè)字段的長(zhǎng)度都是兩個(gè)字節(jié):
1、源端口 : 在需要回信時(shí)選用,不需要可全用0
2、目的端口 : 終點(diǎn)交付報(bào)文
3、長(zhǎng)度 : UDP用戶數(shù)據(jù)報(bào)的長(zhǎng)度,最小值是8
4、檢驗(yàn)和 : 檢測(cè)UDP用戶數(shù)據(jù)報(bào)在傳輸時(shí)是否有錯(cuò),有錯(cuò)就丟棄
如果接收方UDP發(fā)現(xiàn)收到的報(bào)文中的目的端口號(hào)不正確,就丟棄該報(bào)文,并由ICMP發(fā)送“端口不可達(dá)”差錯(cuò)報(bào)文給發(fā)送方
UDP的檢驗(yàn)和是把首部和數(shù)據(jù)部分一起都檢驗(yàn),IP數(shù)據(jù)報(bào)的檢驗(yàn)和只檢驗(yàn)IP數(shù)據(jù)報(bào)的首部
TCP
主要特點(diǎn):
1、面向連接
2、每一條TCP連接只能有兩個(gè)端點(diǎn),每一條TCP連接只能是點(diǎn)對(duì)點(diǎn)的
3、提供可靠交付。無(wú)差錯(cuò)、不丟失、不重復(fù)、按序到達(dá)
-
停止等待協(xié)議
-
無(wú)差錯(cuò)情況,發(fā)送-確認(rèn)-發(fā)送-確認(rèn)······
-
出現(xiàn)差錯(cuò)
-
-
A超過(guò)一段時(shí)間仍沒(méi)有收到確認(rèn),就認(rèn)為剛才發(fā)送的分組丟失了,重傳前面發(fā)送過(guò)的分組,這叫做超時(shí)重傳。
-
要實(shí)現(xiàn)超時(shí)重傳,要在發(fā)送完一個(gè)分組設(shè)置一個(gè)超時(shí)計(jì)時(shí)器,如果在超時(shí)計(jì)時(shí)器到期之前收到了對(duì)方的確認(rèn),就撤銷(xiāo)以設(shè)置的超時(shí)計(jì)時(shí)器
-
-
確認(rèn)丟失和確認(rèn)遲到
- B發(fā)送的確認(rèn)丟失,A重傳數(shù)據(jù),B又收到數(shù)據(jù),會(huì)采取丟棄重復(fù)數(shù)據(jù),向A發(fā)送確認(rèn) 。
- B對(duì)分組的確認(rèn)遲到,A會(huì)收到重復(fù)的確認(rèn),丟棄即可,B還會(huì)收到重復(fù)數(shù)據(jù),同樣丟棄,重傳確認(rèn)
-
-
連續(xù)ARQ協(xié)議
- 發(fā)送方維持發(fā)送窗口,位于發(fā)送窗口的分組都可以連續(xù)發(fā)送出去,不需要等待對(duì)方的確認(rèn),可提高信道利用率
- 連續(xù)ARQ協(xié)議規(guī)定,發(fā)送方每收到一個(gè)確認(rèn),就把發(fā)送窗口向前滑動(dòng)一個(gè)分組的位置,然后可以繼續(xù)發(fā)送新覆蓋的分組。
- 接收方一般采用累計(jì)確認(rèn)的方式,接收方不必逐個(gè)發(fā)送確認(rèn),而是可以在收到幾個(gè)分組后,對(duì)按序到達(dá)的最后一個(gè)分組發(fā)送確認(rèn),這樣就表示,到這個(gè)分組為止的所有分組都正確收到了
- 優(yōu)點(diǎn):容易實(shí)現(xiàn),確認(rèn)丟失也不必重傳
- 確定:不能向發(fā)送方反映出接收方已經(jīng)正確收到的所有分組的信息
4、提供全雙工通信。TCP連接的兩端都設(shè)有發(fā)送緩存和接收緩存,用來(lái)臨時(shí)存放雙向通信的數(shù)據(jù)
5、面向字節(jié)流?!傲鳌笔侵噶魅氲竭M(jìn)程或從進(jìn)程流出的字節(jié)序列。TCP把應(yīng)用程序交下來(lái)的數(shù)據(jù)堪稱(chēng)僅僅是一連串的無(wú)結(jié)構(gòu)的字節(jié)流,不知道字節(jié)流的含義。
TCP連接的端點(diǎn)叫做套接字或插口
端口號(hào)拼接到IP地址即構(gòu)成了套接字
套接字的表示方法是在點(diǎn)分十進(jìn)制的IP地址后面寫(xiě)上端口號(hào),中間用冒號(hào)或逗號(hào)隔開(kāi),例:192.3.4.5:80
套接字socket=(IP地址: 端口號(hào))
每一條TCP連接唯一地被通信兩端的兩個(gè)端點(diǎn)(即兩個(gè)套接字)所確定,即:
TCP連接::={socket1, socket2} = {(IP1: port1), (IP2, port2)}
首部格式
TCP報(bào)文段首部的前20個(gè)字節(jié)是固定的,后面有4N字節(jié)是根據(jù)需要而增加的選項(xiàng)。最小20,最大60
1,2、源端口和目的端口:各占2字節(jié)。
3、序號(hào):4字節(jié)。范圍是
[
0
,
2
32
?
1
]
[0,2^{32}-1]
[0,232?1]。在一個(gè)TCP連接中傳送的字節(jié)流中的每一個(gè)字節(jié)都按順序編號(hào)。序號(hào)字段值指的是本報(bào)文段所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào),也稱(chēng)作“報(bào)文段序號(hào)”
4、確認(rèn)號(hào):4字節(jié)。期望收到對(duì)方下一個(gè)報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào)。如B正確收到A發(fā)送的報(bào)文段,序號(hào)字段為501,數(shù)據(jù)長(zhǎng)度為200,則數(shù)據(jù)序號(hào)分別為501~700,表明B正確收到A發(fā)送的到700為止的數(shù)據(jù),因此B期望收到A的下一個(gè)數(shù)據(jù)序號(hào)為701。
確認(rèn)號(hào)=N,就表明:到序號(hào)N-1為止的所有數(shù)據(jù)都已正確收到
5、數(shù)據(jù)偏移:4位。指出TCP報(bào)文段的數(shù)據(jù)起始處距離TCP報(bào)文段的起始處有多遠(yuǎn),即指出TCP報(bào)文段的首部長(zhǎng)度。
6、保留,6位。保留為今后使用,目前置為0
7、緊急URG,當(dāng)URG=1,表明緊急指針字段有效。它告訴系統(tǒng)此報(bào)文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級(jí)的數(shù)據(jù)),而不按原先排隊(duì)順序來(lái)傳送。
8、確認(rèn)ACK,僅當(dāng)ACK=1時(shí)確認(rèn)號(hào)字段才有效。當(dāng)ACK=0時(shí),確認(rèn)號(hào)無(wú)效。TCP規(guī)定,連接建立后的所有傳送報(bào)文段都必須把ACK置1。
9、10、復(fù)位RST,當(dāng)RST=1時(shí),表明TCP連接中出現(xiàn)嚴(yán)重差錯(cuò),必須釋放連接,然后再重新建立運(yùn)輸連接。RST置1還用了拒絕一個(gè)非法的報(bào)文段或拒絕打開(kāi)一個(gè)連接。
11、同步SYN,連接建立時(shí)用來(lái)同步序號(hào)。SYN=1而ACK=0時(shí),表明是一個(gè)連接請(qǐng)求報(bào)文段。如果對(duì)方同意建立連接,響應(yīng)報(bào)文段中使SYN=1和ACK=1。所以,SYN置1表示這是一個(gè)連接請(qǐng)求或連接接受報(bào)文。
12、終止FIN,用來(lái)釋放一個(gè)連接。FIN=1,表示此報(bào)文段的發(fā)送方的數(shù)據(jù)已發(fā)送完畢,并要求釋放運(yùn)輸連接。
13、窗口,2字節(jié)。是
[
0
,
2
16
?
1
]
[0,2^{16}-1]
[0,216?1]的整數(shù)。指發(fā)送本報(bào)文段的以方的接收窗口。窗口值告訴對(duì)方:從本報(bào)問(wèn)段首部中的確認(rèn)號(hào)算起,接收方目前運(yùn)行對(duì)方發(fā)送的數(shù)據(jù)量。
14、檢驗(yàn)和,2字節(jié)。檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)兩部分。
15、緊急指針,2字節(jié)。僅在URG=1時(shí)才有意義,指出本報(bào)文段中的緊急數(shù)據(jù)的字節(jié)數(shù)。即使窗口為0也可以發(fā)送緊急數(shù)據(jù)。
16、選項(xiàng),長(zhǎng)度可變,最大40字節(jié)。
連接管理
三個(gè)階段:連接建立、數(shù)據(jù)傳送、連接釋放
連接建立
B的TCP服務(wù)器進(jìn)程先創(chuàng)建傳輸控制塊TCB,準(zhǔn)備接受客戶端進(jìn)程的連接請(qǐng)求,然后就處于listen的狀態(tài)。
A的TCP客戶進(jìn)程也是首先創(chuàng)建傳輸控制模塊TCB,然后向B發(fā)送連接請(qǐng)求報(bào)文。
TCB(Transmission Control Block)存儲(chǔ)了每一個(gè)連接中的一些重要信息,如:TCP連接表,到發(fā)送和接收緩存的指針,到重傳隊(duì)列的指針,當(dāng)前的發(fā)送和接收序號(hào)等等。
1、A發(fā)送連接請(qǐng)求:SYN=1,選擇一個(gè)初始序號(hào)seq=x
2、B收到連接請(qǐng)求,如同意建立連接,向A發(fā)送確認(rèn):
SYN=1,ACK=1,seq=y,確認(rèn)號(hào)ack=x+1
3、A收到B的確認(rèn),向B給出確認(rèn)。ACK=1,確認(rèn)號(hào)ack=y+1,主機(jī)的序號(hào)seq=x+1
連接釋放
1、A的應(yīng)用進(jìn)程先向其TCP發(fā)出連接釋放報(bào)文段,并停止發(fā)送數(shù)據(jù),主動(dòng)關(guān)閉TCP連接。連接釋放報(bào)文段首部:FIN=1,seq=u,序號(hào)等于前面已傳送過(guò)的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1。
2、B收到連接釋放報(bào)文段后即發(fā)出確認(rèn),確認(rèn)號(hào)ack=u+1,seq=v,等于B前面已傳送過(guò)的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1。
從A到B方向的連接就釋放了
3、A收到B的確認(rèn)后,等待B發(fā)出連接釋放報(bào)文段
B連接釋放報(bào)文段FIN=1,ack=u+1
4、A收到連接釋放報(bào)文段,A確認(rèn),ACK=1,ack=w+1,seq=u+1文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-513802.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-513802.html
到了這里,關(guān)于計(jì)算機(jī)網(wǎng)絡(luò)————運(yùn)輸層的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!