zoukankan      html  css  js  c++  java
  • TCP/IP协议

    TCP/IP协议

    TCP/IP协议:传输控制协议/网际协议,也叫网络通讯协议。

    它是把OSI七层模型简化为了四层,分别是:应用层、传输层、网络层、数据链路层。TCP/IP是能在多个不同的网络间进行数据传输的协议簇,不仅仅只有TCP IP两个协议,还有SMTP、FTP、UDP、IP、TCP、ICMP、ARP、RARP、ICMP等等,只是TCP和IP最具代表性。

    应用层:HTTP、SMTP、FTP、TELNET、DNS等
    传输层:TCP、UDP等
    网络层:IP、ARP、RARP、ICMP等
    数据链路层:PPP、IEEE 802.2等

    Socket是TCP/IP对外提供的编程接口,也就是网络编程。TCP/IP特点有:完全开放、免费、网络地址统一分配、高层协议标准化,可以提供多种多样的可靠的服务。缺点:不通用,不能描述TCP/IP外的协议。

    TCP和UDP使用IP协议把数据包从一个网络传送到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。

    TCP和UDP的区别

    TCP和UDP是传输层协议。两者区别:

    UDP是无连接的,无需创建连接就能发送数据,速度快,但不可靠,数据传递过程中可能会出现丢包,丢失数据。

    TCP是面向连接的,有连接的创建和断开过程,也就是三次握手四次挥手,因为有确认机制、重传机制、滑动窗口机制,所以TCP是一个可靠性高的协议,保证数据能准确完整的传输,不过相比于UDP速度慢一些。又因为有三次握手的连接过程,可能发生SYN攻击,即大量的TCP半连接塞满了服务器的半连接队列,无法接收新连接。

    另外,可以通过TCP的滑动窗口机制实现流量控制和调整数据发送速率,滑动窗口大小就是服务器缓冲区大小。

     

    基于TCP的协议有:HTTP,FTP,SMTP,TENET,POP3,Finger,NNTP,IMAP4

    基于UDP的协议有:BOOTP,DHCP,NTP,TFTP,SNMP

    DNS可以基于TCP,也可以基于UDP

    HTTP(超文本传输协议)

    HTTP基于TCP,利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。

    它建立在请求/响应模型上,客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。

    HTTP 协议有一个缺陷:通信只能由客户端发起,举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

     

    这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用“轮询”,即每隔一段时候,就发出一个询问,了解服务器有没有新的信息。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。

    在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
    
    在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
    
    由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。
    
    通常的做法是即使不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。
    
    若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

    SCOKET(套接字)

    Socket是对TCP/IP协议的封装,是应用层与TCP/IP协议族通信的中间软件抽象层,只是个接口,不是协议,通过Socket才能使用TCP/IP协议,正如上文“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对的操作接口。就像操作系统会提供标准的编程接口,比如Win32编程接口一样,TCP/IP也必须对外提供编程接口,这就是Socket编程接口。

    Socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。

    创建Socket连接的时候,可以指定传输层协议,可以是TCP或者UDP,当用TCP连接,该Socket就是个TCP连接,反之。

    套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。
    
    它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
    
    应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。
    
    多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。

    应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务

     

    所以,需要IP协议连接网络,TCP允许我们安全传输数据,HTTP、FTP等使用TCP协议来传输数据,HTTP基于TCP协议,可以使用Socket建立一个TCP或UDP。

     

    乱入,https在使用tcp数据传输时加了TLS,比http安全一些。websocket同理。

  • 相关阅读:
    HDU 5835 Danganronpa 贪心
    HDU 5842 Lweb and String 水题
    HDU 5832 A water problem 水题
    Codeforces Beta Round #14 (Div. 2) A. Letter 水题
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem K. UTF-8 Decoder 模拟题
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem I. Alien Rectangles 数学
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem H. Parallel Worlds 计算几何
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem F. Turning Grille 暴力
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem C. Cargo Transportation 暴力
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem G. k-palindrome dp
  • 原文地址:https://www.cnblogs.com/ldy-miss/p/8781328.html
Copyright © 2011-2022 走看看