이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

Network

TCP/IP 소켓 통신

이쿠우우 2020. 11. 21. 14:42
반응형

 

 

 

TCP/IP 소켓 통신

 

TCP/IP 소켓통신 과정 설명

클라이언트 소켓과 서버 소켓으로 구분되어짐

 


클라이언트 소켓 통신 과정

[1. 소켓을 생성]

클라이언트와 특정 서버와 통신을 하기 위해서는 운영체제에 socket() 시스템콜을 통해 소켓을 생성함

 

[2. 소켓을 연결]

connect() 시스템 콜을 호출하여 서버와 클라이언트간 연결 함

3 way handshake 방식을 사용해서 연결 함

 

(3 way handshake 란?)

1) 클라이언트는 서버에게 연결요청의 SYN이라는 비트 1을 만들어 TCP 헤더 정보를 설정하고 보냄.

2) 서버는 받은 페킷을 기반으로 수신처 포트번호에 대항하는 소켓을 찾고 거기에 해당 클라이언트에 대한 정보를 저장.

3) 서버도 SYN 비트를 만들고 정상적으로 처리했다는것을 알리기 위해 ACK비트 1로 해서 클라이언트에게 전달.

4) 클라이언트는 받은 패킷 정보를 기반으로 서버측 접속 성공을 확인.

5) 클라이언트도 자신도 정상적으로 처리했다는것을 알리기 위해 ACK 비트를 1로 만들어서 서버에게 전달.

6) 데이터 송수신 상태 완료.

 

 

[3. 데이터 송수신]

read() write() 시스템 콜로 실행함

프로토콜 스택은 받은 데이터내용을 바로 송신하는것이 아니라

일단 자체 송신용 버퍼 메모리영역에 저장하고

에플리케이션이 데이터를 건내주기를 기다림

데이터 양이 너무 적으면 빈번하게 송신이 일어나기 때문에 모아서 전송할 수 있고

반대로 데이터 양이 너무 크면 분할하여 보냄

 

[4. 소켓연결 종료]

close() 시스템 콜로 실행

4 way handshake 방식을 사용해서 연결을 종료

 

(4 way handshake 란?)

1) 클라이언트는 서버 FIN에 1을 설정한 TCP 헤더가 도착하면 자신의 소켓에 서버연결이 종료되었다는걸 표시.

2) 클라이언트는 자신이 FIN 플래그를 받았다는것을 알리기 위해 서버에게  ACK를 전송.

3) 그와 동시에 클라이언트에서 해당 포트에 연결되어있는 어플리케이션에게  close()를 요청.

4) 어플리케이션의 연결 종료 준비가 끝나면 클라이언트도 마찬가지로 FIN 플래그를 서버에게 보냄.

5) 서버가 FIN 플래그를 받게 되면 받았다는 것을 클라이언트에게 알리기 위해 ACK 플래그를 보냄.

6) 클라이언트가 ACK를 받게되면 네트워크가 종료.

 

 


 

서버 소켓 통신 과정

[1. 소켓을 생성]

서버와 클라이언트 간 통신을 하기 위해서는 운영체제에 socket() 시스템콜을 통해 소켓을 생성.

 

[2. 소켓을 바인딩]

bind() 시스템 콜을 사용.

소켓과 포트 번호를 결합하는 과정.

해당 포트가 사용중인지 사용중이지 않는지 확인하고 사용을 하고 있지 않은 포트라면 결합.

 

[3. 연결요청을 대기]

listen() 시스템 콜을 사용

포트번호 (또는 ip and port)가 서버소켓과 바인딩이 완료되었다면

클라이언트의 연결 요청이 수신될때까지 대기

즉 클라이언트에서 connect()를 사용할때까지 대기

 

[4. 연결을 허용]

accept() 시스템 콜을 사용

accept API에서 새로운 소켓을 만들어 해당 소켓으로 클라이언트와 연결

상위에서 사용했던 서버 소켓은 클라이언트 연결요청을 수신하는 소켓이고

실질적으로 연결되는 소켓은 accept() 를 통해 이루어짐

 

[5. 송수신]

데이터를 송수신 하는 과정은 클라이언트와 동일

read() write() 시스템 콜을 사용

 

[6. 소켓연결 종료]

close() 시스템콜을 사용

주의할 점은 close 대상이 두개라는 점

클라이언트와 연결에 사용했던 서버 소켓과

accept() 로 만들었던 소켓 

2개를 종료해야함

 

 


TCP 헤더

 

 

  • - CWR : Congestion Window Reduced) – 혼잡 윈도우 크기 감소
  • - ECN : Explicit Congestion Notification) – 혼잡을 알림

 

 

IP 헤더

 

 


 

 

 

반응형