网络编程

 架构 -- 程序员开发的一种模式

C/S    客户端/服务器模式

B/S      Browser浏览器/服务器

(B/S      Browser浏览器/服务器相当于网页版的客户端,例如 网页QQ 网页微信,游戏等)

B/S架构的优势: 统一了应用的接口

 

 

网络通信编程:
 两台电脑  如何通信?      --- 一条网线就可以办到
 
 多台电脑  如何通信?      --- 交换机
 
 更多太电脑  如何通信?    --- 交换机+路由器


[   两台电脑怎么会通信呢?
   每台电脑都会有个网卡,  在usb接口处    网卡:mac地址    mac地址:物理地址
   网卡一般是由网卡生产厂商给的 ,不能随便给,要遵循一定规则.  为什么呢?
   因为mac地址要求全球唯一                                                                                         
]

 mac 地址:
 在cmd中查看命令  ipconfig  -all
 --------mac地址是12位十六进制组成---------

-------ip 地址是四位点分十进制  字节是8位--------

服务器1寻找服务器2的mac地址步骤:
1,发送请求帧给交换机
2,交换机以广播方式找寻服务器2
3,服务器2接收到请求返回给交换机
4,交换机以单薄方式返回给服务器1

整个过程就是服务器1 通过服务器2的ip地址,借助交换机的功能,找到了服务器2的mac地址(arp协议)

arp协议: 通过目标ip地址获取目标mac地址  

 

 

 

端口:操作系统为每一个应用程序分配一个端口号 ip+端口号唯一确定唯一程序

如果给你一个ip地址,如何去确定它是不是在你当前的局域网内呢?
 ip地址  &(余)  子网掩码

 ex:
     ip地址    192.168.1.12
          1100 0000 . 1010 1000 . 0000 0001 . 0000 1100
  
          1111 1111 . 1111 1111 . 1111 1111 . 0000 0000
    
     结果 1100 0000 . 1010 1000 . 0000 0001 . 0000 0000
       ---> 192.168.1.0 网段
    
  子网掩码  255.255.255.0
 

子网掩码: 是与ip地址进行余运算得到网段


  用网段来确定一个ip地址是否在你当前的局域网内.
 
  网段 = ip地址    &     子网掩码


[如何寻找外网? (自己的理解)
 服务器会记录ipv4(比如 www.baidu.com) 发送给交换机
 交换机发现我没有,然后发给路由器没有的话,发送给代理ip, 代理ip发送请求

 如果有两个班级,如何从这个班级寻找另一个班的网呢?
 服务器1发送ip给交换机,交换机没有发送后给网关,网关发给路由器,路由器寻找,找到后进入

  寻找]


路由器:  有一个路由表 记录了归他管理的所有网段

局域网 :   两台电脑也算是局域网,
广域网:  泛指国际, 国际上中国就算是一个局域网

                                                                                                                                             协议:  由多人指定的一种规则                                                                                                    

TCP 和UDP协议 (通信协议)
 是通过socket模块去操作 tcp和udp协议的


它们两个的区别是什么??
 1.tcp协议: 代表安全可靠通信方式 面向连接
 2.udp协议: 不安全,不可靠的通信方式,但是快!!

 

 

ip地址:127.0.0.1  
这是个回环地址,无论什么时候都可以代表本机ip地址(只限本机使用)

 

 

 

 

 

有一道面试题:
 
tcp协议:
 三次握手: 注意必须是client(客户端) 先发起请求
  1,client发送给server(服务端)我想连接你,可以么
  2,server回复client, 可以,我也想连接你,可以吗?
  3,client回复server, 可以

 四次挥手: 谁先发起请求都可以
  1,client发送请求:我准备断开连接了,我没有数据需要发送了
   如果你有数据可以继续发给我
  2,server回复: 确认接收到你的请求,我开始着手准备断开事宜
  3,server回复: 我准备好了,可以随时断开连接
  4,client回复:断开连接吧

 

面试该怎么回答三次握手四次挥手呢?

  三次握手:

      首先必须先由客户端发起连接的请求,接下来,服务器接收到请求之后,回复给客户端两个标识,

      syn表示服务器接收到的请求,一个ack表示服务器在做准备工作,两个标识一起回复给客户端

      最后,客户端接收到服务器的回复,客户端准备连接的所有资源,开始进行连接,发送给服务器一

      个ack表示客户端的连接准备工作已经完成.(此时表示客户端和服务器可以相互连接了.)

      -------如果面试官问 哪句代码体现了三次握手?

      ------- 回答: 服务器端的accept,客户端 connect   

  

  四次挥手:

      ⑴ 首先由连接双方任意一方发起断开连接的请求,发起方发送的请求表示是我没有数据要继  

       续发送了,可以断开连接了,但是你如果还有数据可以继续向我发送数据

      ⑵接收方回复给发起方,表示接到了发起方的断开请求,开始着手准备断开事宜

      ⑶接收方准备完成后,给发起方发送一个标识,标识接收方没有数据发送了,可以断开连接了

      ⑷发起方接受到消息后,准备断开连接,回收资源

      ---------如果面试官问:哪句代码体现了四次挥手?

      ---------回答: close()

 

socket概念

 

理解socket

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

其实站在你的角度上看,socket就是一个模块。我们通过调用模块中已经实现的方法建立两个进程之间的连接和通信。
也有人将socket说成ip+port,因为ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序。
所以我们只要确立了ip和port就能找到一个应用程序,并且使用socket模块来与之通信。

 

互联网协议与osi模块
 osi 五层模型:
  应用层  : .py文件
                  http,ftb,tftb...
  传输层  : tcp/udp
  网络层  : ip协议
  数据链路层  : arp协议  ,网卡
  物理层  : 网线,集线器,光纤

 

posted @ 2018-07-19 11:48  九月江  阅读(133)  评论(0编辑  收藏  举报