网络

2019-03-02  本文已影响0人  遇明不散

网络体系结构标准

OSI模型

七层模型

四层

五层(TCP/IP模型)

网络协议

在网络传输过程中,为了保证通信的正常而制定的都遵守的约定。

应用层协议

TFTP、DNS、FTP、SMTP、HTTP

传输层协议

TCP、UDP

网络层协议

IP、ARP、ICMP

物理链路层协议

IEEE

主机

主机名称

计算机名、域名,仅限于本地,用不了互联网。

本地主机表示方法:IP

表示本机在网络上的定位。

相关函数

// 导入相关模块
import scoket                 
 
// 获取主机名称
socket.gethostname()   
         
// 通过主机名称解析本机或主机服务器IP
socket.gethostbyname('hostname') 

//  解析本机localhost回环IP  
socket.gethostbyname('localhost')   
              
/* 
* 查看主机的信息,返回一个元组
* 第一个参数表示主机名
* 第二个参数表示主机别名
* 第三个参数表示主机地址 
* args可以是IP或域名  
*/
socket.gethostbyaddr('args')

IP地址

指一台计算机在互联网中的标志

IPv4

表示方法

IPv6

192.168.1.0 表示该网段
192.168.1.1 该网段的网关地址
192.16.1.255 广播地址

ping命令

查看是否可以访问某台主机

IP地址的转换

/*
   socket.pton()与socket.ntop()有第一个参数
   AF_INET表示转化IPv4类地址
   AF_INET6表示转化IPv6类地址
  其余和socket.inet_aton()与socket.inet_ntoa()功能相同
*/

// 将点分十进制转换为二进制
socket.inet_aton('192.168.12.23')  // b'\xc0\xa8\x0c\x17'
socket.inet_pton(socket.AF_INET,'192.168.12.23')  // b'\xc0\xa8\x0c\x17'

// 将二进制转换为点分十进制
socket.inet_ntoa(b'\xc0\xa8\x0c\x17')  // 192.168.12.23
socket.inet_ntop(socket.AF_INET,b'\xc0\xa8\x0c\x17')   // 192.168.12.23

域名

互联网服务器IP的名字,方便使用

端口号

地址的组成部分,用于在一个系统中区分应用层程序
取值范围:1~65536
1 ~ 255 众所周知的端口,一些特有的程序会占用这些端口
256 ~ 1023 系统程序占用的端口
1024 ~ 49151 登记端口(可以使用)
49152 ~ 65535 私有端口或者动态端口
推荐使用10000以上的端口号

获取系统中某个网络服务程序的端口号
// 获取系统中某个网络服务程序的端口号
socket.getservbyname('ssh')    // 22
socket.getservbyname('mysql')  // 3306
socket.getservbyname('http')   // 80

子网掩码

与IP配合使用,来确定当前的网段。
按位相与即可得到当前网段。

字节序

TCP/UDP协议

传输层提供的通信协议

面向连接的可靠服务(TCP协议)
面向无连接的不可靠服务(UDP协议)

套接字

网络间进行通信的方式的名称。
在linux中演化为一种文件类型。

套接字的分类

流式套接字

表示传输层使用TCP协议提供面向连接的传输服务,以字节流形式进行传输

数据报套接字

表示传输层使用UDP协议提供面向无连接的传输服务,以消息结构体形式进行传输

原始套接字

一般用于底层测试(一般用不到)

基于TCP协议的socket编程

服务端

客户端

connect(address)

TCP循环服务不能满足多个客户端同时发送请求的情况,它不允许多个单个客户端单独长期占有服务器资源

TCP数据传输

recv会不断取出接受缓冲区中的内容,如果一次没有拿完,那么下次回继续收取没拿完的消息

TCP粘包
处理粘包现象
#!/usr/bin/python3
# argv.py
import sys
// 将命令行内容收集为一个列表,每一个元素是命令行中的一项
print(sys.argv)

// ./argv.py ab cd
print(sys.argv)   // ['argv.py','a','b']

基于UDP协议的socket编程

服务端

客户端

相关函数

recvfrom(BUFFERSIZE)

sendto(data,addr)

TCP于UDP的区别

套接字属性

sock = socket.socket()

上一篇下一篇

猜你喜欢

热点阅读