zoukankan      html  css  js  c++  java
  • TCP/IP简介

    TCP/IP简介

    OSI的“实现”:TCP/IP参考模型

    并不完全符合OSI的七层参考模型,但我们可以理解为OSI的一种实现

    TCP/IP协议简述

    在很多情况下,它只是利用IP协议进行通信时,所必须用到的协议群的统称,具体来说,IP、http、ftp、UDP、TCP都属于TCP/IP协议,

    它们与TCP/IP协议的关系紧密,是互联网必不可少的组成部分,TCP/IP一词泛指这些协议,因此TCP/IP协议为网际协议群。

    OSI模型注重通信协议必要的功能时什么,而TCP/IP协议更强调在计算机上实现协议应该开发哪种程序。

    TCP/IP在数据传输中和OSI一样,TCP/IP每个分层中都会对所发的数据附加一个头部,在这个头部中包含了该层的必须信息,如发送的目标地址以及协议相关信息,

    通常为协议提供信息的为报头的首部,所要发送的内容为数据,从下一层角度看,数据被传送到接收端后,再层层解套出来。

    网络数据处理流程

    从应用层开始都会对传输的数据头部进行处理,加上本层的一些信息,最终由物理层通过以太网电缆等介质将数据解析成比特流在网络中传输;

    数据传递到目标地址并自底向上将先前对应的头部给解析分离出来。

    IP协议

    IP协议是无连接的通信协议,它不会占用两个正在通信的两个计算机之间的通信线路,这样IP就降低了对网络线路的需求,

    每条线都可以同时满足许多不同计算机之间的通信需求,通过IP,消息或其他数据会被分隔成较小的独立的包,

    并通过Intel网在计算机之间传送,IP负责将每个包路由到它的目的地,但是IP协议没有做任何事情来确认数据包是否按顺序发送或包是否被破坏,

    所以IP数据包不可靠,需要它的上一层协议来控制, 传输层TCP协议。

    TCP协议

    (1)面向连接的、可靠的、基于字节流的传输层协议 

    (2)将应用层的数据流分隔层报文段发送给目标节点的TCP层

      说明:数据传输时应用层向TCP发送数据流,然后TCP把数据流分隔成适当长度的报文段,报文段长度受该计算机连接的网络

      数据链路层的最大传输量及MPU的限制,此后TCP把结果包传递给IP层,由IP层通过网络将包传送给目标节点的TCP层。

    (3)数据包都有序号,对方收到则发送ACK确认,未收到则重传

      说明:TCP为了保证不丢失包就给每个包一个序号即seq num,同时序号也保证了传送到目标节点包的按序处理,

      接受端实体对已经成功收到的包发回一个相应的确认即ACK确认,如果发送端实体在合理的往返时间及RTT内未收到确认,

      那么对应的数据包就会被假定为丢失,并且将会对其进行重传。

    (4)使用校验和来校验数据在传输过程中是否有误

      说明:TCP用一个校验和函数来就校验数据是否有错误,在发送和接收时都要计算校验和

    TCP报头文

    Souce port

    源端口,2个字节

    Destination port

    目标端口,2个字节

    说明:TCP, UDP数据包都不包含IP地址信息,因为那是IP层上的事(IP地址信息是网络层的工作),但TCP,UDP都有源端口和目标端口,端口属于传输层的范畴。

    两个进程在计算机内部进行通信可以有管道、内存共享、消息队列等方法,两个进程能够进行通信最基本的前提是能够唯一标识一个进程,

    通过这个唯一标识的进程找到对应的进程。在本地通信中,我们可以使用PID即我们的进程标识符(进程号)进行唯一标识一个进程,但PID

    只在本地唯一,如果两个进程放在两个不同的计算机,让它们进行通信,PID就不够用,这样就需要另外一个手段:在传输层中使用协议端口号。

    IP层的ip地址可以唯一标识主机,而TCP协议和端口号可以唯一标识主机中的一个进程,这样我们可以通过IP地址+协议+端口号唯一标识网络中

    的一个进程。一些场合把唯一标识模式称为套接字。通信的重点是应用进程,但我们只要把要传送的报文交到目的主机中某个合适的端口,剩下的

    工作就交给TCP来完成。

    Sequence Number

    4个字节

    说明:TCP连接中传送的字节流中的每个字节都是按顺序标号的,例如一段报文的seq num是107而携带的数据共有100字段,

    那么下一个报文段其seq num就应该是207开始

    Acknowledgement Number

    ACK确认号,4个字节

    说明:期望收到对方的下一个报文的第一个数据字节的序号,例如B收到了A发送过来的报文,其序列号字段为301,而数据长度为200字节,

    这表明B正确的收到了A发送301~500为止的数据,B期望收到A的下一个序号为501,于是B在发送给A的确认报文段中AC Num为501.

    offset即数据偏移,由于头部有可选字段,长度不固定,因此它指出TCP报文的数据距离TCP报文的起始数有多远,Reserved为保留域。

    TCP flags

    URG:紧急指针标志,为1表示紧急指针有效,为0表示紧急指针无效

    ACK:确认序号标志,为1表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段

    PSH:push标志,为1表示带有push标志的数据,指示接受方在接收到该报文段后应尽快将这个报文段交给应用程序而不是在缓存区排队

    RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接或者用于拒绝非法的报文段和拒绝连接请求

    SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1, ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带确认即SYN=1, ACK=1

    FIN:finish标志,用于释放连接,为1时表示发送方没有数据发送了,关闭本方数据流

    window窗口

    指滑动窗口的大小,用来告知发送端接收端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制

    CheckSum

    检验和,对整个TCP报文段包括TCP头部,TCP数据以十六位进行计算所得,由发送端计算存储并由接收端进行验证

    Urgent Pointer

    当TCP FLAGS中的URG为1时才有效,指出本报文段中的紧急数据的字节数

    TCP Options

    TCP可选项

  • 相关阅读:
    2. C++ continue
    1. Vector
    1007. 行相等的最少多米诺旋转
    4. 寻找两个正序数组的中位数
    3.无重复字符的最长子串
    1. 两数之和
    509. 斐波那契数
    Linux内核源码分析之setup_arch (三)
    1018-可被5整除的二进制前缀
    605-种花问题
  • 原文地址:https://www.cnblogs.com/marton/p/10851945.html
Copyright © 2011-2022 走看看