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 -服务端/客户端编程

Python学习---Socket编程

服务器端并发聊天[socketServer]

Python学习---socketServer编程

Socket通信原理以及三次握手和四次挥手详解

Python学习---Socket通信原理以及三次握手和四次挥手详解

远程执行命令

Python学习---远程执行命令

网络文件上传

Python学习---网络文件上传

【学习参考】 http://www.cnblogs.com/yuanchenqi/articles/5692716.html

Python学习---网络编程 1217【all】的更多相关文章

  1. python之网络编程

    本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用 ...

  2. python中网络编程

    网络编程软件架构介绍: C/S:客户端,服务端 B/S:浏览器,服务端 # 常见应用: 1.手机端看着感觉是c/s架构其实更多的是b/s架构,例如微信小程序,支付宝第三方接口 2.pc端:b/s比较火 ...

  3. Python的网络编程--思维导图

    Python的网络编程--思维导图

  4. Python高级网络编程系列之第一篇

    在上一篇中我们简单的说了一下Python中网络编程的基础知识(相关API就不解释了),其中还有什么细节的知识点没有进行说明,如什么是TCP/IP协议有几种状态,什么是TCP三次握手,什么是TCP四次握 ...

  5. python基础网络编程--转

    python之网络编程 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的 ...

  6. python 基础网络编程2

    python 基础网络编程2 前一篇讲了socketserver.py中BaseServer类, 下面介绍下TCPServer和UDPServer class TCPServer(BaseServer ...

  7. python 基础网络编程1

    python 基础网络编程1 Source code: Lib/socketserver.py lib的主目录下有一个sockserver.py文件, 里面是python基本的网络编程模型 共有一个b ...

  8. Python学习网络爬虫--转

    原文地址:https://github.com/lining0806/PythonSpiderNotes Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scra ...

  9. Java学习——网络编程

    Java学习——网络编程 摘要:本文主要介绍了什么是网络编程,以及如何使用Java语言进行网络编程. 部分内容来自以下博客: https://www.cnblogs.com/renyuan/p/269 ...

随机推荐

  1. springboot+zuul(二)------智能负载

    一.参考 参考资料:https://www.cnblogs.com/flying607/p/8330551.html ribbon+spring retry重试策略源码分析:https://blog. ...

  2. Java 中 String 的常用方法(二)

    本文介绍剩下的一些常用的 String 中的方法. 1.replace 方法 .replaceFirst 方法和 replaceAll 方法 replace(char oldChar, char ne ...

  3. *2_3_5_加入reference model

    摘自:http://book.2cto.com/201408/46009.html 在2.1节中讲述验证平台的框图时曾经说过,reference model用于完成和DUT相同的功能. referen ...

  4. java并发编程(7)构建自定义同步工具及条件队列

    构建自定义同步工具 一.通过轮询与休眠的方式实现简单的有界缓存 public void put(V v) throws InterruptedException { while (true) { // ...

  5. jquery 选择唯一值 选择器“”非“用法

    $(document).ready(function () { $("#addwork").hide(); $(".xi").click(function(){ ...

  6. 关于C#的强制转换和尝试转换的方法

    将String[]类型的Object类型,转换为String[]类型: public string ObjectToString(object ob) { string str = string.Em ...

  7. centos开启防火墙端口

    1. 查看已打开的端口 # netstat -anp 2. 查看想开的端口是否已开 # firewall-cmd --query-port=80/tcp 若此提示 FirewallD is not r ...

  8. windows上memecache添加多个端口命令

    sc create "Memcached Server1" start= auto binPath= "D:\01_Soft\memcached\memcached.ex ...

  9. SpringMVC学习笔记:SpringMVC框架的执行流程

    一.MVC设计模式 二.SpringMVC框架介绍 三.SpringMVC环境搭建 四.SpringMVC框架的请求处理流程及体系结构

  10. Redis 的 Lua 脚本支持

    Redis 2.6.0 内置的Lua Script支持,可以在Redis的Server端一次运行大量逻辑. 整个Script默认是在一个事务里的. Script里涉及的所有Key尽量用变量,从外面传入 ...