Python学习---网络编程 1217【all】
OSI七层模型: 物理层, 数据链路层, 网络层,传输层,会话层,表达层,应用层
应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
传输层:TCP,UDP
网络层:IP,ICMP,OSPF,EIGRP,IGMP
数据链路层:SLIP,CSLIP,PPP,MTU
【图片来自网络】
网络通信要素:
A:IP地址 (1) 用来标识网络上一台独立的主机
(2) IP地址 = 网络地址 + 主机地址(网络号:用于识别主机所在的网络/网段。主机号:用于识别该网络中的主机)
(3) 特殊的IP地址:127.0.0.1(本地回环地址、保留地址,点分十进制)可用于简单的测试网卡是否故障。表示本机。
B:端口号: (1) 用于标识进程的逻辑地址。不同的进程都有不同的端口标识。
(2) 端口:要将数据发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识。为了方便称呼这些数字,则将这些数字称为端口。(此端口是一个逻辑端口)
C: 传输协议:通讯的规则。例如:TCP、UDP协议(好比两个人得用同一种语言进行交流)
①、UDP:User Datagram Protocol用户数据报协议
特点: 面向无连接:传输数据之前源端和目的端不需要建立连接; 每个数据报的大小都限制在64K(8个字节)以内;面向报文的不可靠协议。(即:发送出去的数据不一定会接收得到)传输速率快,效率高; 现实生活实例:邮局寄件、实时在线聊天、视频会议…等。
②、TCP:Transmission Control Protocol传输控制协议
特点: 面向连接:传输数据之前需要建立连接; 在连接过程中进行大量数据传输; 通过“三次握手”的方式完成连接,是安全可靠协议;传输速度慢,效率低。
TCP三次握手的Socket过程:
- 服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待;
- 客户端Socket对象调用connect()向服务器发送了一个SYN并阻塞;
- 服务器完成了第一次握手,即发送SYN和ACK应答;
- 客户端收到服务端发送的应答之后,从connect()返回,再发送一个ACK给服务器;
- 服务器Socket对象接收客户端第三次握手ACK确认,此时服务端从accept()返回,建立连接。
接下来就是两个端的连接对象互相收发数据。
TCP四次挥手的Socket过程:
- 某个应用进程调用close()主动关闭,发送一个FIN;
- 另一端接收到FIN后被动执行关闭,并发送ACK确认;
- 之后被动执行关闭的应用进程调用close()关闭Socket,并也发送一个FIN;
- 接收到这个FIN的一端向另一端ACK确认。
上面的代码是简单的演示Socket的基本函数使用,其实不管有多复杂的网络程序,这些基本函数都会用到。上面的服务端代码只有处理完一个客户端请求才会去处理下一个客户端的请求,这样的服务器处理能力很弱,而实际中服务器都需要有并发处理能力,为了达到并发处理,服务器就需要fork一个新的进程或者线程去处理请求。
Socket -服务端/客户端编程
服务器端并发聊天[socketServer]
Socket通信原理以及三次握手和四次挥手详解
Python学习---Socket通信原理以及三次握手和四次挥手详解
远程执行命令
网络文件上传
【学习参考】 http://www.cnblogs.com/yuanchenqi/articles/5692716.html
-------------------------------------------
个性签名: 所有的事情到最後都是好的,如果不好,那說明事情還沒有到最後~
本文版权归作者【小a玖拾柒】和【博客园】共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利!