tioon's Devlog

TCP 통신이란? 본문

네트워크

TCP 통신이란?

tioon 2023. 3. 27. 14:03

*공부 기록용으로 하는 블로그입니다.잘못된 개념이나 오타가 있을 수 있습니다. 잘못된 정보알려주시면 수정하겠습니다!*

 

TCP 프로토콜이란?

   -TCP는 데이터를 안정적이고 신뢰성 있게 전송하기 위한 프로토콜입니다. TCP는 연결 지향적으로 패킷전송을 안정적으로 보장합니다. 다음은 TCP의 특징입니다.

 

 

1.연결지향 : 연결지향으로 3-way handshake를 통해 연결을 하여 데이터를 전송합니다.

2.신뢰성있는 데이터 전달 보장 : TCP는 연결지향적으로 ACK과정을 통해 데이터를 신뢰성있게 보냅니다.

3.데이터의 순차적인 전달 보장 : TCP는 세그먼트 넘버를 통해 분할되어 있는 데이터를 순차적으로 전달 하는것을 보장합니다.

4.흐름제어 : 데이터 전송 속도를 조절하여 수신 측에서 처리할 수 있는 데이터양을 넘지 않도록 합니다.

5.혼잡제어 : 네트워크 상황에 따라 패킷 전송 속도를 조절하여 네트워크 혼잡을 방지하여 안정적인 전송을 보장합니다.

6.큰 헤더 사이즈 : 신뢰성있는 데이터보장을 위해 정보가 많아 큰 헤더 사이즈를 가지고 있습니다.

 

 

TCP 프로토콜 기본 구조

 

Source port

   -TCP 세그먼트를 보내는 송신 측의 포트번호 (보내는 포트)

 

Destination port

   -TCP 세그먼트를 받는 수신 측의 포트번호 (받는 포트)

 

Sequence Number

   -TCP는 데이터를 쪼개서 보내는데 이 쪼갠 데이터들 중에서 가장 빠른 번호가 할당됩니다. 예를들어 패킷을 1100에서 시작하여 1250까지 보냈다고하면 sequence number는 1100입니다. 그리고 다음에 보내게 될 sequence number는 1251입니다.

 

Acknowledgement Number

   -데이터를 정상적으로 받았다는 것을 상대방에게 알리기 위해 사용됨, 마지막으로 받은 패킷의 마지막 바이터 번호를 적어서 보냅니다. 즉,상대방으로 부터 받아야하는 다음 TCP 세그먼트 데이터 번호입니다. 예를 들어 만약에 지금까지 1250까지 처리를 했다면 ack number는 그다음 처리해야할 번호임 1251입니다.

 

Header Length

   -TCP 헤더의 길이를 알려줌 보통 헤더의 길이는 20바이트 인데 4비트로 표현이 됨.Header 길이는 1부터 15까지만 표현 가능  따라서 Header Length 값 * 4바이트를 해서 표시가됨. (4 * 5(Header length) = 20)

 

TCP flags 

   - TCP 세그먼트 기능을 표현함 (CWR,ECE,URG,ACK,PSH,RST,SYN,FIN의 기능이 있음)

 

Window Size

   -본인의 수신버퍼의 크기를 알리는데 사용이됩니다. 즉, 상대방에게 ack받을 수 있는 크기를 알려줌. 송신window와 수       신 window가 있습니다.

      송신 window - 수신측의 확인(ack) 없이, 한번에 전달 할 수 있는 바이트 사이즈 (송신측에서 전송할 수 있는 데이터 양)

      수신 window - 수신측에서 수신할 수 있는 바이트 사이즈 (수신 측에서 받을 수 있는 데이터의 양)

 

TCP checksum

   -세그먼트의 데이터 무결성을 검사하는 비트로 tcp필드들을 계산하여 체크섬 값을 적는데, 수신측에서는 이것을 다시 계산하고 비교하여 패킷 무결성을 검사합니다.

 

Urgent Pointer

   -긴급 데이터를 가리키는 포인터 입니다.

 

 

 

TCP server-client 통신 과정

서버 소켓 과정
  1. socket()
    -소켓을 생성
  2. bind()
    -생성된 소켓에 IP주소, 포트넘버등의 정보를 설정
  3. listen()
    -소켓을 대기상태로 만들어 소켓에 들어오는 연결요청을 수신할 수 있도록 설정
  4. accept()
    -클라이언트에서 연결요청신호를 수락하여 TCP연결함.
  5. send() , recv()
    -연결된 클라이언트와 데이터 송수신
  6. close()
    -클라이언트와 연결해제

 

클라이언트 소켓 과정
  1. socket()
    -소켓을 생성
  2. connect()
    -서버에 tcp연결요청신호를 보냄.
  3. send() , recv()
    -연결된 서버와 데이터 송수신
  4. close()
    -서버와 연결해제

 

 

 

 

 

 

 

 

 

 

 

 

 

이미지 출처 :https://upload.wikimedia.org/wikipedia/commons/d/de/TCP_Seqment_ba%C5%9Fl%C4%B1%C4%9F%C4%B1.png 

'네트워크' 카테고리의 다른 글

MAC주소와 ARP  (0) 2023.05.02
멀티플렉싱 개념(select,epoll)  (0) 2023.05.02
멀티 쓰레드(세마포어,뮤텍스) , 멀티플렉싱이란?  (0) 2023.04.11
시그널(Signal)이란?  (0) 2023.04.03
UDP 통신이란?  (0) 2023.03.27