OSI中的层 功能 TCP/IP协议族
应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示层 数据格式化,代码转换,数据加密 没有协议
会话层 解除或建立与别的接点的联系 没有协议
传输层 提供端对端的接口 TCP,UDP
网络层 为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP
数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
物理层 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2
应用层
传输层
网络层
数据链路层
物理层
物理层:中继器、集线器、还有我们通常说的双绞线也工作在物理层
数据链路层:网桥(现已很少使用)、以太网交换机(二层交换机)、网卡(其实网卡是一半工作在物理层、一半工作在数据链路层)
网络层:路由器、三层交换机
传输层:四层交换机、也有工作在四层的路由器
而且对于有网络协议工程师之类笔试,几乎是必考的内容.企业对这个问题热情之高,出乎我的意料:-)。有时上午面试前强调这个问题,并重复讲一次,下午几乎每一个人都被问到这个问题。
因此在这里详细解释一下这两个过程。
TCP三次握手
所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。
三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket 编程中,客户端执行connect()时。将触发三次握手。
![](http://up.2cto.com/2013/1011/20131011011302389.jpeg)
客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。
![](http://up.2cto.com/2013/1011/20131011011312539.jpeg)
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。
![](http://up.2cto.com/2013/1011/20131011011320604.jpeg)
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1
![](http://up.2cto.com/2013/1011/20131011011328110.jpeg)
![](http://up.2cto.com/2013/1011/20131011011337310.jpeg)
![](http://up.2cto.com/2013/1011/20131011011347923.jpeg)
TCP的全称为传输控制协议。这种协议可以提供面向连接的可靠的字节流服务。第二种协议为UDP全称为用户报文协议,它可以提供面向非连接的不可靠的点到多点的通信。这是两种协议的区别。
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
1.TCP使用窗口机制进行流量控制 。
2. 什么是窗口?
连接建立时,各端分配一块缓冲区(用来存储接收的数据,并将缓冲区的尺寸发送给另一端接收方发送的确认信息中包含了自己剩余的 缓冲区尺寸剩余 缓冲区空间的数量)叫做窗口 。
用TCP还是UDP,那要看你的程序注重哪一个方面?可靠还是快速?(建立连接三次握手,超时重传,检验数据,流量控制等原因)
应用程序只能通过UDP方式发送广播。
一般情况下,如果调用sendto,只能向非广播地址发送数据报。如果要发送广播数据报,必须告诉内核,可以通过设置SO_BROADCAST套接口选项来做到这一点。
int on=1;
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int));
Broadcast Address(广播地址)是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中, 主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,对于 10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 ),当发出一 个目的地址为10.1.1.255 的分组(封包)时,它将被分发给该网段上的所有计算机。
广播地址主要有两类
广播地址应用于网络内的所有主机
1)受限广播
它不被路由但会被送到相同物理网络段上的所有主机
IP地址的网络字段和主机字段全为1就是地址255.255.255.255
2)直接广播
网络广播会被路由,并会发送到专门网络上的每台主机
IP地址的网络字段定义这个网络,主机字段通常全为1,如 192.168.10.255
四种I P广播地址
受限的广播地址
受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚 至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
指向网络的广播
指向网络的广播地址是主机号为全1的地址。A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。
指向子网的广播
指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码。例如,如果路由器收到发往 128.1.2.255的数据报,当B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但如果该子网的掩码为 255.255.254.0,该地址就不是指向子网的广播地址。
指向所有子网的广播
指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向所有子网的广播地址的子网号及主机号为全1。例如,如果目的子网 掩码为255.255.255.0,那么IP地址128.1.255.255是一个指向所有子网的广播地址。然而,如果网络没有划分子网,这就是一个指向 网络的广播。
广播和广播地址
1. TCP/IP协议栈中, 传输层只有UDP可以广播.
2. 只能对同一子网内部广播, 广播数据包不经过路由器.
3. UDP的广播地址为255.255.255.255
4. 在winsock实现中, 有一个选项对应是否允许广播.
必须调用setsockopt打开该选项.
5. 打开后, 用sendto向255.255.255.255发送的数据包全部广播.
很多局域网都定义了一个特殊的保留地址, 称为广播地址. 当信息头中目的地址域的内容为广播地址时, 该帧被局域网上所有计算机接收. 这个过程称为广播.
合法的广播地址就是主机的网络地址加上最大的主机号。网络地址通过机器的ip地址与子网掩码按位与得出,我们以ip地址为10.78.202.175 ,子网掩码为255.255.255.0。
为例来分析一下上面的几个概念
首先将这两个东西换算成二进制代码
ip地址:00001010.01001110.11001010.10101111
子网掩码:11111111.11111111.11111111.00000000
按位与之后得出网络地址:00001010.01001110.11001010.00000000
十进制表示就是10.78.202.0
这个网络地址理论上可以有254台主机