25 (OC)* iOS网络HTTP、TCP、UDP、Socket 知识总结

  • 应用层:
    1.用户接口、应用程序;
    2.Application典型设备:网关;
    3.典型协议、标准和应用:TELNET、FTP、HTTP

  • 表示层:
    1.数据表示、压缩和加密presentation
    2.典型设备:网关
    3.典型协议、标准和应用:ASCLL、PICT、TIFF、JPEG|MPEG
    4.表示层相当于一个东西的表示,表示的一些协议,比如图片、声音和视频MPEG。

  • 会话层:
    1.会话的建立和结束;
    2.典型设备:网关;
    3.典型协议、标准和应用:RPC、SQL、NFS、X WINDOWS、ASP

  • 传输层:
    1.主要功能:端到端控制Transport;
    2.典型设备:网关;
    3.典型协议、标准和应用:TCP、UDP、SPX

  • 网络层:
    1.主要功能:路由、寻址Network;
    2.典型设备:路由器;
    3.典型协议、标准和应用:IP、IPX、APPLETALK、ICMP;

  • 数据链路层:
    1.主要功能:保证无差错的疏忽链路的data link;
    2.典型设备:交换机、网桥、网卡;
    3.典型协议、标准和应用:802.2、802.3ATM、HDLC、FRAME RELAY;

  • 物理层:
    1.主要功能:传输比特流Physical;
    2.典型设备:集线器、中继器
    3.典型协议、标准和应用:V.35、EIA/TIA-232.一、前言

         以下是我自己的学习加理解,分享给大家,同时也算是自己做的笔记吧,俗话说好记性不如烂笔头,希望来的你能有所帮助,有什么理解不到位的地方,还请大神些多多指教。

二、网络模型

   OSI 七层模型:我们一般使用的网络数据传输由下而上共有七层,分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

 
OSI网络七层模型

TCP/IP模型:TCP/IP 模型分为四层,由下而上分别为网络接口层、网络层、传输层、应用层。

 

 

 
TCP/IP网络模型

 


 

三、概念

   短连接

   连接 -> 传输数据->关闭连接。就建立一次,但任务结束就中断连接。 

  长连接

    连接 -> 传输数据 -> 保持连接 -> 传输数据。。。-> 关闭连接。是指连接后不管是否使用都保持连接,但安全性较差。

  长连接、短连接用法:

         长连接多用于操作频繁,点对点的通讯,而且连接数不能太多的情况下。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理 速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成Socket错误,而且频繁的Socket创建也是对资源的浪费。

        而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接 会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下 需用短连好。

总之,长连接和短连接的选择要视情况而定。


HTTP

http连接:

http协议即超文本传送协议,是web联网的基础,也是手机联网常用协议之一,http协议是建立在tcp协议之上的一种应用。

          http连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

       1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。

        2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

       由于http在每次请求结束后都会主动释放连接,因此http连接是“短连接”。要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的 做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客 户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。


Socket

       套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。

        应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

 
socket

建立socket连接

            建立 Socket 连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。

            套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

             服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

             客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

             连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

Socket连接与TCP连接

                创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

Socket连接与HTTP连接

                 由于通常情况下 Socket 连接就是TCP连接,因此 Socket 连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。

                 而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

                 很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给 客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。


TCP与UDP的区别

          TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。

          UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。

TCP三次握手:指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

          第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。

          第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的序列号加1以,即X+1。

           第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1。并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写序列号的+1。

 

 

 
tcp三次握手

QQ、微信为什么是UDP而不是TCP:

           像腾讯QQ之类的大规模即时通讯软件,经常性的是几千万用户同时在线 如果都采用长连接的方式。岂不是要服务器的硬件防火墙监控数千万个连接了,就算分布式服务端能承受这么多用户 网关也受不了,而且有理由相信服务器也受不了 。所以对于大规模即时通讯,尤其是用户数量众多 肯定不能用TCP常连接的方式,这种方式只适合于小规模的即时通讯,如局域网,公司内部的即时通讯等 对于大规模的,用户数量众多的C/S软件 应当采用UDP协议进行数据传输,网关就不停收发数据包就可以了。 

           使用TCP协议和客户端进行短命连接,用了就关 比如客户登陆请求好友列表,我们就和他建立TCP连接发给他好友列表,然后关掉连接 当用户要给另外一个客户发信心我们再建立连接,数据传完我们又关掉连接 这种方式,无疑服务器可以承载更多的用户登陆。但是缺点也是非常明显的 一般情况下我们接收的数据都不大,每次发一点点消息都要建立连接 TCP本来就比较消耗网络资源,这样毫无规律的断断连连 连连断断,加上本来这种方式就有较高的延迟 也不适合大规模的即时通讯

           事实上,在Internet上传输的UDP包从A发送给B 它完整地到达几率一般情况下还是相当之高的。我们开发一个多用户的即时通讯软件 采用UDP传输消息的时候,报文被划分成包 一个UDP包究竟是多大?经过我的了解一个UDP用户包最大大小是64KB 根据网络状况,实际在传输包的时候可能把包划成若干个分片 一个分片的最大大小是1640B 可以保存好几百个汉字。UDP协议提供数据报机制传输信息 如果报文比较长,比如一个文件,一个图片 要被划分成若干个数据包,由于对于一般的文字消息和其它指令都是比较小的 它们会被放在一个包里面,由于UDP是无连接的 不可靠的,如果发生丢包,不会重传 所以不能保证数据包能完整并准确地到达目的地,但是对于我们的即时通讯软件来说 一般的聊天信息比较小,比如我们给一个好友发送一条聊天信息“今天我很高兴”,会不会服务器转发的时候只收到“今天我很高”,再传给好友的时候变成了“今天”,答案是不会发生这种情况的 UDP虽然描述是不可靠,不过依然在数据包中包含了头信息描述了包的大小等信息,在包进行转发的过程中 如果数据不完整,是会被网络设备发现的,比如中途一个转发这个包的路由器发现了一个不完整的UDP包会直接丢弃,如果是TCP 当有包被丢弃了会进行重传,对于UDP 包在传输过程中由于数据的缺失被丢弃不会进行重传 我们顶多就是一条信息发送失败了,而这种概率一般情况下是非常低的 。

开发时到底选择TCP还是UDP:

        如果是由客户端间歇性的发起无状态的查询,并且偶尔发生延迟是可以容忍,那么使用HTTP/HTTPS吧。

        如果客户端和服务器都可以独立发包,但是偶尔发生延迟可以容忍(比如:在线的纸牌游戏,许多MMO类的游戏),那么使用TCP长连接吧。

        如果客户端和服务器都可以独立发包,而且无法忍受延迟(比如:大多数的多人动作类游戏,一些MMO类游戏),那么使用UDP吧。


基本TCP客户—服务器程序设计基本框架

 

 

tcp

基本UDP客户—服务器程序设计基本框架流程图

 

 


 

一:TCP/IP协议

 

 

二:七层协议

1:物理层

物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。

 1.1:传输媒体和互连设备 

      物理层的媒体包括架空明线、平衡电缆、光纤、无线信道等。
      通信用的互连设备指DTE和DCE间的互连设备。数据传输通常是经过DTE——DCE,再经过DCE——DTE的路径。互连设备指将DTE、DCE连接起来的装置,如各种插头、插座。LAN中的各种粗、细同轴电缆、T型接、插头,接收器,发送器,中继器等都属物理层的媒体和连接器。
      
      DTE(Data Terminal Equipment(DTE))即数据终端设备,又称物理设备,如计算机、终端等都包括在内。
      DCE(数据通信设备 Data Communication Equipment(DCE))则是数据通信设备或电路连接设备,如调制解调器

 1.2:物理层的主要功能

  1.2.1:为数据终端设备提供传送数据的通路,数据通路可以是一个物理媒体,也可以是多个物理媒体连接而成。一次完整的数据传输,包括激活物理连接,传送数据,终止物理连接.所谓激活,就是不管有多少物理媒体参与,都要在通信的两个数据终端设备间连接起来,形成一条通路。

   1.2.2:  传输比特流数据. 物理层要形成适合数据传输需要的实体,为数据传送服务。一是要保证数据能在其上正确通过,二是要提供足够的带宽(带宽是指每秒钟内能通过的比特(BIT)数),以减少信道上的拥塞。传输数据的方式能满足点到点,一点到多点,串行或并行,半双工或全双工,同步或异步传输的需要。

1.3:物理层的一些重要标准

  这些规范通常也参考了其他组织制定的标准。连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:RS-232、RS-449、Rj45、等。

   ISO2110:称为"数据通信----25芯DTE/DCE接口连接器和插针分配"。它与EIA(美国电子工业协会)的"RS-232-C"基本兼容。

   ISO2593:称为"数据通信----34芯DTE/DCE----接口连接器和插针分配"。

       ISO4092:称为"数据通信----37芯DTE/DEC----接口连接器和插针分配".与EIARS-449兼容。

  CCITT V.24:称为"数据终端设备(DTE)和数据电路终接设备之间的接口电路定义表".其功能与EIARS-232-C及RS-449兼容于100序列线上。

 

         Rj45:连接器的一种,连接器由插头(接头、水晶头)和插座(模块)组成,左边:RJ45。右边:RS-232.

              

2:数据链路层

 2.1:数据链路层

      1:数据链路层在不可靠的物理介质上提供可靠的传输。

    2:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输。

 

2.2:链路层的主要功能

  链路层是为网络层提供数据传送服务的,这种服务要依靠本层具备的功能来实现。链路层应具备如下功能:
  1:链路连接的建立,拆除,分离。
    2:帧定界帧同步。链路层的数据传输单元是帧,协议不同,帧的长短和界面也有差别,但无论如何必须对帧进行定界。
  3:顺序控制,指对帧的收发顺序的控制。
  4:差错检测和恢复,还有链路标识,流量控制等等.差错检测多用方阵码校验和循环码校验来检测信道上数据的误码,而帧丢失等用序号检测.各种错误的恢复则常靠反馈重发技术来完成。
 
2.3:数据链路层的主要协议
  1:ARP(Address Resolution Protocol)地址解析协议:是根据IP地址获取物理地址的一个TCP/IP协议
  2:RARP:Reverse Address Resolution Protocol ,反向地址转换协议:许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。
  3:HDLC:High Level Data Link Control(高级数据链路控制协议)。帧结构
  4:PPP点对点协议(Point to Point Protocol,)为在点对点连接上传输多协议数据包提供了一个标准方法。 

3:网络层协议

3.1:网络层的任务就是

  1:进行逻辑地址寻址,实现不同网络之间的路径选择, 确保数据包及时传送。    “第三层交换机”

3.2:网络层的功能包括:建立和拆除网络连接、路径选择和中继、网络连接多路复用、分段和组块、服务选择和流量控制。

3.3:主要协议:

   1:IP协议
       2:ICMP:(Internet Control Message Protocol)互联网控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机路由器之间传递控制消息。
   3:IGMP:Internet 组管理协议称为IGMP协议(Internet Group Management Protocol)
 

4:传输层

4.1: a: 网络层的ip帮我们区分子网,以太网层的mac地址帮我们找到主机,端口帮我们找到应用程序。

  b: 只在通信双方的节点上(比如计算机终端)进行处理,而无需在路由器上处理,传输层是OSI中最重要、最关键的一层,是唯一负责总体的数据传输和数据控制的一层;

传输层提供端到端的交换数据的机制,检查分组编号与次序,传输层对其上三层如会话层等,提供可靠的传输服务,对网络层提供可靠的目的地站点信息主要功能

 

4.2:功能:

  1:建立端口到端口的通信。

  2:这种传输服务分为可靠和不可靠的,其中Tcp是典型的可靠传输,而Udp则是不可靠传输

  3:为端到端连接提供流量控制,差错控制,服务质量(Quality of Service,QoS)等管理服务

 

4.3:主要协议:

  TCP:传输控制协议,传输效率低,可靠性强

      UDP:用户数据报协议,适用于传输可靠性要求不高,数据量小的数据(比如QQ)
 

5:会话层

5.1:会话层

   1:建立、管理、终止会话。

    2:对应主机进程,管理不同设备之间通信

  3:将不同应用程序的数据分离

5.2:主要协议

  SSL:SSL(Secure Sockets Layer 安全套接层),
  TLS:传输层安全(Transport Layer Security,TLS)
 

6:表示层

6.1:数据的表示(将设备固有的数据格式转换为网络标准传输格式)、加密、压缩。
 

7:应用层

应用层为操作系统或网络应用程序提供访问网络服务的接口
TCP协议

1:超文本传输协议HTTP(HyperText Transfer Protocol,):这是一种最基本的客户机/服务器的访问协议;浏览器向服务器发送请求,而服务器回应相应的网页

2:文件传送协议FTP(File Transfer Protocol):提供交互式的访问,基于客户服务器模式,面向连接 使用TCP可靠的运输服务

   主要功能:减少/消除不同操作系统下文件的不兼容性 

3:远程登录协议TELNET:客户服务器模式,能适应许多计算机和操作系统的差异,网络虚拟终端NVT的意义

4:简单邮件传送协议SMTP(Simple Mail Transfer Protocol):Client/Server模式,面向连接 

   基本功能:写信、传送、报告传送情况、显示信件、接收方处理信件 

5:POP3:(Post Office Protocol - Version 3)”,即“邮局协议版本3

6:IMAP(Internet Mail Access Protocol)以前称作交互邮件访问协议

UDP协议:

7:简单文件传送协议TFTP(Trivial File Transfer Protocol):客户服务器模式,使用UDP数据报,只支持文件传输,不支持交互,TFTP代码占内存小 

8:简单网络管理协议(SNMP(Simple Network Management Protocol)): SNMP模型的4个组件:被管理结点、管理站、管理信息、管理协议

   SNMP代理:运行SNMP管理进程的被管理结点

   对象:描述设备的变量

   管理信息库(MIB):保存所有对象的数据结构

9:DHCP(Dynamic Host Configuration Protocol)动态主机配置协议: 发现协议中的引导文件名、空终止符、属名或者空,DHCP供应协议中的受限目录路径名 Options –可选参数字段,参考定义选择列表中的选择文件

 

10:DNS(Domain Name System)域名解析协议:DNS是一种用以将域名转换为IP地址的Internet服务

DNS占用53号端口,同时使用TCP和UDP协议。那么DNS在什么情况下使用这两种协议?

DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议。

DNS区域传输的时候使用TCP协议:

1.辅域名服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,会执行一次区域传送,进行数据同步。区域传送使用TCP而不是UDP,因为数据同步传送的数据量比一个请求应答的数据量要多得多。

2.TCP是一种可靠连接,保证了数据的准确性。

域名解析时使用UDP协议:

客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过三次握手,这样DNS服务器负载更低,响应更快。理论上说,客户端也可以指定向DNS服务器查询时用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。

三:网络互联设备

互连设备
工作层次
主要功能
中继器
物理层
对接收信号进行再生和发送,只起到扩展传输距离的作用,对高层协议是透明的,但使用个数有限。
集线器
物理层
多端口的中继器
网桥
数据链路层
根据帧物理地址进行网络之间的信息转发,可缓解网络通信繁忙度,提高效率。网桥纳入存储和转发功能可使其适应于连接使用不同MAC 协议的两个LAN,因而构成一个不同LAN 混连在一起的混合网络环境。
二层交换机
数据链路层
指传统的交换机,多端口网桥。
三层交换机
网络层
带路由功能的二层交换机。
路由器
网络层
通过逻辑地址进行网络之间的信息转发,可完成异构网络之前的互联互通,只能连接使用相同网络协议的子网。
多层交换机
高层(第4~7层)
带协议转换的交换机。
网关
高层(第4~7层)
最复杂的网络互连设备,用户连接网络层以上执行不同协议的子网。

网卡是物理层的设备。

 

OSI 整个模型层次大致可以分为3个主要层面来看
|.............主机...............| 操作系统和软件等 应用、表示、会话
|.............网络...............| 互联网络和相关协议 传输、网络 (TCP/IP)
|.............介质...............| 物理介质相关 数据链路、物理

posted on 2018-07-17 10:02  风zk  阅读(368)  评论(0编辑  收藏  举报

导航