1.TCP/IP:傳輸控制協(xié)議/網(wǎng)際協(xié)議漫谷,指能夠在多個(gè)不同網(wǎng)絡(luò)間實(shí)現(xiàn)信息傳輸?shù)膮f(xié)議簇,是互聯(lián)網(wǎng)相關(guān)的各類協(xié)議族的總稱,如(TCP,UDP,IP,FIP,HTTP,ICMP,SMTP)
Tcp:面向連接的喉祭,可靠的,基于字節(jié)流的傳輸層數(shù)據(jù)協(xié)議
TCP/IP包含模型:鏈路層,網(wǎng)絡(luò)層捂敌,傳輸層轰胁,應(yīng)用層
OSI七層模型:物理層,數(shù)據(jù)鏈路層掉盅,網(wǎng)絡(luò)層也拜,傳輸出,會(huì)話層趾痘,表示層慢哈,應(yīng)用層
2.物理層功能:以二進(jìn)制數(shù)據(jù)形式在物理媒體上傳播數(shù)據(jù)
數(shù)據(jù)鏈路層:傳輸有地址的幀以及錯(cuò)誤檢測(cè)功能.TCP/IP協(xié)議族(SLIP,CSLIP,PPP,ARP,RARP,MTU)
網(wǎng)絡(luò)層:為數(shù)據(jù)包選擇路由.TCP/IP協(xié)議族(IP,ICMP,RIP,OSPF,BCP,ICMP)
傳輸層:提供端對(duì)端的接口。TCP/IP協(xié)議族(TCP,UDP)
會(huì)話層:解除或建立與別接點(diǎn)的聯(lián)系
表示層:數(shù)據(jù)格式化永票,代碼轉(zhuǎn)換卵贱,數(shù)據(jù)加密
應(yīng)用層:文件傳輸,電子郵件侣集,文件服務(wù)键俱,虛擬終端.TCP/IP協(xié)議族(TFTP,HTTP,FTP,SMTP,DMS,Telnet)
3.TCP三次握手:a.1. 首先客戶端向服務(wù)器端發(fā)送一段TCP報(bào)文,其中: 標(biāo)志位為SYN世分,表示“請(qǐng)求建立新連接”; 序號(hào)為Seq=X(X一般為1)方妖; 隨后客戶端進(jìn)入SYN-SENT階段。
b.服務(wù)器端接收到來自客戶端的TCP報(bào)文之后罚攀,結(jié)束LISTEN階段党觅。并返回一段TCP報(bào)文,其中: 標(biāo)志位為SYN和ACK斋泄,表示“確認(rèn)客戶端的報(bào)文Seq序號(hào)有效杯瞻,服務(wù)器能正常接收客戶端發(fā)送 的數(shù)據(jù),并同意創(chuàng)建新連接”(即告訴客戶端炫掐,服務(wù)器收到了你的數(shù)據(jù))魁莉; 序號(hào)為Seq=Y; 確認(rèn)號(hào)為Ack=X+1,表示收到客戶端的序號(hào)Seq并將其值加1作為自己確認(rèn)號(hào)Ack的值旗唁;隨后 服務(wù)器端進(jìn)入SYN-RCVD(Received)階段畦浓。
c.客戶端接收到來自服務(wù)器端的確認(rèn)收到數(shù)據(jù)的TCP報(bào)文之后,明確了從客戶端到服務(wù)器的數(shù)據(jù)傳輸 是正常的检疫,結(jié)束SYN-SENT階段讶请。并返回最后一段TCP報(bào)文。其中: 標(biāo)志位為ACK屎媳,表示“確認(rèn)收到服務(wù)器端同意連接的信號(hào)”(即告訴服務(wù)器夺溢,我知道你收到我發(fā) 的數(shù)據(jù)了); 序號(hào)為Seq=X+1烛谊,表示收到服務(wù)器端的確認(rèn)號(hào)Ack风响,并將其值作為自己的序號(hào)值; 確認(rèn)號(hào)為Ack=y+1丹禀,表示收到服務(wù)器端序號(hào)Seq状勤,并將其值加1作為自己的確認(rèn)號(hào)Ack的值; 隨后客戶端進(jìn)入ESTABLISHED階段双泪。 服務(wù)器收到來自客戶端的“確認(rèn)收到服務(wù)器數(shù)據(jù)”的TCP報(bào)文之后持搜,明確了從服務(wù)器到客戶端的 數(shù)據(jù)傳輸是正常的。結(jié)束SYN-SENT階段攒读,進(jìn)入ESTABLISHED階段朵诫。
4.TCP四次揮手:a.首先客戶端想要釋放連接,向服務(wù)器端發(fā)送一段TCP報(bào)文;
b.服務(wù)器端接收到從客戶端發(fā)出的TCP報(bào)文之后薄扁,確認(rèn)了客戶端想要釋放連接剪返,隨后服務(wù)器端結(jié)束 ESTABLISHED階段,進(jìn)入CLOSE-WAIT階段(半關(guān)閉狀態(tài))并返回一段TCP報(bào)文;
c.服務(wù)器端自從發(fā)出ACK確認(rèn)報(bào)文之后邓梅,經(jīng)過CLOSED-WAIT階段脱盲,做好了釋放服務(wù)器端到客戶端方 向上的連接準(zhǔn)備,再次向客戶端發(fā)出一段TCP報(bào)文;
d.客戶端收到從服務(wù)器端發(fā)出的TCP報(bào)文日缨,確認(rèn)了服務(wù)器端已做好釋放連接的準(zhǔn)備钱反,結(jié)束FIN-WAIT-2 階段,進(jìn)入TIME-WAIT階段匣距,并向服務(wù)器端發(fā)送一段報(bào)文
使用Python創(chuàng)建Socket
1.socket.socket(addressfamily,type)[Address Family:可以選擇AF_INET(用于Internet 進(jìn)程間通信)或者AF_UNIX(用于同一臺(tái)機(jī)器 進(jìn)程間通信)面哥,實(shí)際工作中常用AF_INET;Type:套接字類型,可以是SOCK_STREAM(流式套接字毅待,主要用于TCP協(xié)議)或者 SOCK_DGRAM(數(shù)據(jù)報(bào)套接字尚卫,主要用于UDP協(xié)議)]
2.常用方法:
(1)?bind(): 綁定地址(host,port)到套接字, 在AF_INET下,以元組(host,port)的形式表示地址尸红。
(2)sendto(): 發(fā)送UDP數(shù)據(jù)吱涉,將數(shù)據(jù)發(fā)送到套接字刹泄,address是形式為(ipaddr,port)的元組怎爵,指 定遠(yuǎn)程地址特石。返回值是發(fā)送的字節(jié)數(shù)。
(3)send(): 發(fā)送TCP數(shù)據(jù)鳖链,將string中的數(shù)據(jù)發(fā)送到連接的套接字姆蘸。返回值是要發(fā)送的字節(jié)數(shù)量,該數(shù) 量可能小于string的字節(jié)大小撒轮。
(4)recvfrom(): 接收UDP數(shù)據(jù), 返回值是(data,address)乞旦。其中data是包含接收數(shù)據(jù)的字符串贼穆, address是發(fā)送數(shù)據(jù)的套接字地址题山。
(5)recv(): 接收TCP數(shù)據(jù),數(shù)據(jù)以字符串形式返回故痊,可以指定要接收的最大數(shù)據(jù)量顶瞳。
(6)accept(): 被動(dòng)接受TCP客戶端連接,(阻塞式)等待連接的到來
(7)listen(): 開始TCP監(jiān)聽
(8)close(): 關(guān)閉套接字