网络编程

Posted liuafan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。

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

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回复:断开连接吧

技术分享图片

 

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协议  ,网卡
  物理层  : 网线,集线器,光纤

技术分享图片

 































































以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章

Linux高级网络编程系列教程

Linux高级网络编程系列教程

面向对象编程面向组件编程面向方面编程面向服务编程

编程范式:命令式编程(Imperative)声明式编程(Declarative)和函数式编程(Functional)

少儿编程教育未来前景如何?我想加入少儿编程这行。

TCP/IP网络编程——理解网络编程和套接字编程