TCP及socket通信原理详解
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
轉載于:https://blog.51cto.com/zerofly/1541724
總結
以上是生活随笔為你收集整理的TCP及socket通信原理详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逻辑地址,线性地址,物理地址
- 下一篇: 关于程序员