UDP是簡單的,不可靠的數據報協議,而TCP是精致的,可靠的字節流協議。SCTP跟TCP類似也是可靠的傳輸協議,但它還提供消息邊界,傳輸層支持多宿主,最小化擁塞。
UDP(用戶數據報協議):
提供無連接的服務,同一個套接口可以發送數據報給不同的服務器,也可以在同一個套接口接收來自不同服務器的數據報。
TCP(傳輸控制協議):
一. TCP提供客戶與服務器連接。
二. 提供可靠性,發過去後需要對方的確認,如果沒有收到確認會重傳。
三. TCP通過給所發送數據的每一個字節關聯一個序列號進行排序。接收方的TCP將根據分節的序列號重新排序在將結果數據傳遞給應用進程。
四. 提供流量控制。通告窗口(advertised window)告訴對方它能接收多少字節的數據。緩沖區滿時,必須等應用程序取走數據後才能再接收
五. TCP是全雙工的
TCP建立連接的三路握手
1. 服務器通過調用socket, bind, listen 函數來完成被動打開;
2. 客戶通過connect進行主動打開,引起TCP發送一個SYN分節,告訴服務器客戶將在連接中發送的數據的初始序列號,
3. 服務器必須確認客戶的SYN,同時自己發送一個SYN,含有服務器在連接中發送的數據的初始序列號,同時發送對客戶SYN的ACK。
4. 客戶確認服務器的SYN。
SYN使用的TCP選項:
MSS選項。 通知對象自己的最大分節大小,即能接受的每個TCP分節中的最大數據量
窗口規模選項。 只有對方收到對方的SYN來的這個選項時,才能發送該選項。
時間戳選項。
高帶寬或長延時的網絡才會用到後兩個選項。
TCP連接終止:
1. 某個進程先調用close(主動關閉)。發送一個FIN,表示數據發送完畢。
2. 另一端收到後被動關閉,由TCP確認FIN,它的接收也作為文件結束符接收方應用程序。
3. 收到文件結束符的應用程序將調用close關閉套接口,導致它的TCP也發送一個FIN。
4. 收到這個FIN的原發送方對它確認。