简答
OSI 7层
物理层 物理层是在通信通道上传输原始比特流。这层的设计问题是处理接人位于物理层下的物理媒介的机械的、电气的、功能的以及程序化的特性。
数据链路层 数据链路层的主要功能是为信息在物理链路层上传输提供可靠性,包括帧发送同步、差错控制、流控制。数据链路层的处理单元是帧。
网络层 网络层控制子网的操作,是处理端到端传送的最低层。网络层的处理单元是包,它的主要功能是路由选择、拥塞控制以及网络互连。设计的主要问题之一是决定包如何从源节点路由到目的接点。为了达到这个目的,网络层必须了解通信子网的拓扑以及在考虑网络负载均衡时如何选择合适的路径通过。
传输层 传输层的基本功能是从上一层接收数据,如果需要的话,把它拆分成更小的数据单元传送给网络层,并且保证数据正确到达另一端。 再者,所有 这些必须高效地完成并且在一定程度上把高一层和物理技术,上不可避免地改变隔离开。传输层是一个从源节点到目的节点的真正的端到端的层。
会话层 会话层允许不同机器上的用户在彼此之间建立会话。这一层提供多种服务,包括对话控制、令牌管理以及同步。
表示层 表示层关注的是信息传输的语法和语义。它管理抽象的数据结构和允许更高一层要定义和交换的数据结构。
应用层 应用层包含了很多用户需要的各种各样的协议。一种广泛使用的应用协议是超文本传输协议,它是万维网的基础。另外,像文件传输、电子邮件.多媒体这些通常的应用就位于这一层。
TCP/IP 4层 名字及功能
TCP/IP体系架构是在实验的分组交换网ARPANET上进行协议研究和发展的结果,它一般被称为 TCP/IP协议族。TCP/IP模型把通信任务组织成四个 独立的层次:接人层、网络层、传输层和应用层。
TCP/IP参考模型中最低层是接人层。除了指出这一层负责使用某种协议连接网络,这里先不详细讨论这一层的功能。参考模型没有定义这样的协议,而且不同的主机、不同的网络使用的协议也不同。
从下往上的第二层是网络层。它定义了正式的包格式和IP(网际协议)协议。它的主要功能是把IP包发送到目的地,包路由是这层的关键问题。TCP/IP 模型中网络层的功能和OSI参考模型中网络层的功能类似。
在TCP/IP模型中位于网络层之上的是传输层。正如OSI参考模型中的传输层一样,这一层设计目的是实现源主机和目的主机中对等实体的对话。
TCP/IP参考模型没有会话层和表示层。传输层的上面是应用层。它包含更高一层的协议,如TELNET(远程登录协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、HTTP(超文本传输协议)等。
CIDR地址块平均划分子网
简述TCP和UDP区别
三个主要区别:TCP面向连接,UDP无连接
TCP可靠,UDP不可靠
TCP面向字节流,UDP面向报文
什么是sockets(套接字)
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
Socket的英文原义是"孔"或"插座"。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
编程题(四选一或选二)
TCPClient.py
import socket
ip_port = (‘127.0.0.1’,9995)
socket = socket.socket()
socket.connect(ip_port)
while True:
msg = raw_input(‘Please enter the data to send: \n’)
socket.sendall((msg))
if msg==‘q’: break
server_reply = socket.recv(1024)
if not server_reply: break
print ('The received data of the server is: ')
print (str(server_reply))
socket.close()
TCPServer.py
import socket
ip_port = (‘127.0.0.1’,9995)
socket = socket.socket()
socket.bind(ip_port)
socket.listen(5)
print (‘Please wait…’)
conn,addr = socket.accept()
print(‘The link is successful. I am the server. Welcome the link:’)
print(addr)
while True:
client_data = conn.recv(1024)
print (‘receive Clinet Data-> ‘+client_data)
print (’\n’)
if client_data==‘q’: break
conn.sendall(bytes(‘Hello customer, I am the server. I have received information.’))
conn.close()
socket.close()
UDPClient.py
from socket import *
HOST=‘127.0.0.1’
PORT=9993
address=(HOST,PORT)
s = socket(AF_INET,SOCK_DGRAM)
while True:
message = raw_input(‘send message:>>’)
s.sendto(message,address)
if message==‘q’: break
data = s.recvfrom(1024)
if not data: break
print data
s.close()
UDPServe.py
from socket import *
HOST = ‘127.0.0.1’
PORT = 9993
s = socket(AF_INET,SOCK_DGRAM)
s.bind((HOST,PORT))
print ‘…waiting for message…’
while True:
data,address = s.recvfrom(1024)
print data,address
if data==‘q’: break
s.sendto(‘this is the UDP server’,address)
s.close()