TCP/IP原型
DARPA一個項目,逐漸演變而來的。
端口號
0~1023:管理員纔有權限使用,永久地分配給某應用使用;
註冊端口:
1024~41951:只有一部分被註冊,分配原則上非特別嚴格;
動態端口或私有端口:
41952+:
/proc/sys/net/ipv4/ip_local_port_range:內核參數定義兩個數字,表示可以做爲臨時端口的起始數字和結束數字。
套接字類型:
tcp socket TCP傳輸數據協議、 SCTP流控制傳輸協議
udp socket UDP用戶數據報協議 DCCP
raw socket 裸套接字 不通過TCP和UDP等協議直接由應用層的程序直接到達網絡層由ipv4 ipv6封裝傳輸
TCP協議的功能:
①連接建立
②將數據打包成段 MTU通常爲1500以下
校驗和
③確認、重傳以及超時機制
④排序
序列號 32位 並非從0開始 過大的話循環輪換 從0開始
⑤流量控制 速度不同步2臺數據的服務器 防止阻塞
緩衝區 發送緩衝 接收緩衝
滑動窗口
⑥擁塞控制 多個進程通信
慢啓動 通過慢啓動的方式探測,啓動的時候很小 隨後以指數級增長。
擁塞避免算法
RFC:請求註解文檔,起草定義這個協議的組織定義這個協議實現的過程等。
socket: IPC的一種實現,用於同一或不同主機上的進程間的通信;
socket通信在domain中實現:
識別一個socket的方法(socket地址格式)
Domain:
Unix Domain: 基於socket機制實現同一主機不同進程間通信的一種方式;AF_UNIX, AF_LOCAL,地址是一個路徑名(文件) 同一主機通過內核中一個文件直接傳輸,而不需要通過協議棧傳輸。
IPv4 Domain: AF_INET, 基於socket機制藉助於ipv4協議實現不同主機(也可以是同一主機)上的進程間通信的機制; 地址是32位的ipv4地址+16位的端口號。
IPv6 Domain: AF_INET6, 地址是128位的Ipv6地址+16位的端口號
socket的類型:
TCP:流式socket,SOCK_STREAM
可靠、雙向、面向字節流
UDP:數據報式socket, SOCK_DGRAM
相關的系統調用:
socket(): 創建一個新的socket
bind():綁定於一個套接字地址上;
listen(): 監聽套接字;
accept(): 接收連接請求;
connect(): 發起連接請求;
close(): 關閉連接
read()和write(): recv(), send(), recvfrom(), sendto()
tcp協議通過tcp狀態來標記當前處於通信過程的哪個階段:
CLOSED, LISTEN, SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT1, CLOSE_WAIT, FIN_WAIT2, LAST_ACK, TIME_WAIT, CLOSED