网络协议-3-TCP

2019-10-01  本文已影响0人  宠辱不惊的咸鱼

TCP头部结构

tcp-001.jpg tcp-006.jpg tcp-007.jpg

三次握手

tcp-002.jpg

四次挥手

tcp-003.jpg

客户端状态序列

tcp-004.jpg

服务端状态序列

tcp-005.jpg

状态转换

case CLOSED:
    if(收到“被动打开”报文)
        进入LISTEN状态
    if(收到“主动打开”报文)
        发送SYN报文段
        进入SYN-SENT状态
    if(收到任何报文段)
        发送RST报文段
    if(收到任何其他报文)
        发出差错报文
    break
case LISTEN:
    if(收到“发送数据”报文)
        发送SYN报文段
        进入SYN-SENT状态
    if(收到任何SYN报文段)
        发送SYN+ACK报文
        进入SYN-RCVD状态
    if(收到任何其他报文段或者报文)
        发出差错报文
    break
case SYN-SENT状态:
    if(超时)
        进入CLOSED状态
    if(收到SYN报文段)
        发送SYN+ACK报文段
        进入SYN-RCVD状态
    if(收到SYN+ACK报文段)
        发送ACK报文段
        进入ESTABLISHED状态
    if(收到其他任何报文段或者报文)
         发出差错报文
    break
case SYN-RCVD状态:
    if(收到ACK报文段)
        进入ESTABLISHED状态
    if(超时)
        发送RST报文段
        进入CLOSED状态
    if(收到“关闭”报文)
        发送FIN报文段
        进入FIN-WAIT-1状态
    if(收到RST报文段)
        进入LISTEN状态
    if(收到任何其他报文段或者报文)
        发出差错报文
    break
case ESTABLISHED状态:
    if(收到FIN报文段)
        发送ACK报文段
        进入CLOSE-WAIT状态
    if(收到“关闭”报文)
        发送FIN报文段
        进入FIN-WAIT-1状态
    if(收到RST或SYN报文段)
        发出差错报文
    if(收到数据或ACK报文段)
        调用输入模块
    if(收到“发送”报文)
        调用输出模块
    break
case FIN-WAIT-1状态:
    if(收到FIN报文)
        发送ACK报文段
        进入CLOSING状态
    if(收到FIN+ACK报文段)
        发送ACK报文段
        进入TIME-WAIT状态
    if(收到ACK报文段)
        进入FIN-WAIT-2状态
    if(收到任何其他报文段或者报文)
        发出差错报文
    break
case FIN-WAIT-2状态:
    if(收到FIN报文段)
        发送ACK报文段
        进入TIME-WAIT状态
    break
case CLOSING状态:
    if(收到ACK报文段)
        进入TIME-WAIT状态
    if(收到其他任何报文段或者报文)
        发出差错报文
    break
case TIME-WAIT状态:
    if(超时)
        进入CLOSED状态
    if(收到FIN报文段)//自己补充的,我认为应该有这样一个
        发送ACK报文段
    if(收到其他任何报文段或者报文)
        发出差错报文
    break
case CLOSE-WAIT状态:
    if(收到“关闭”报文)
        发送FIN报文段
        进入LAST-ACK状态
    if(收到任何其他报文段或者报文)
        发出差错报文
    break
case LAST-ACK状态:
    if(收到ACK报文段)
        进入CLOSED状态
    if(收到任何其他报文段或者报文)
        发出差错报文
    break
上一篇下一篇

猜你喜欢

热点阅读