TCP/Ip

yeong·2022년 4월 18일
0

web

목록 보기
1/3

TCP/IP

오늘날 네트워크 상 데이터 통신은 패킷통신을 기본으로한다. 송수신을 위한 데이터는 여러개의 패킷으로 나누어져 여러 경로를 통해 전달된 후 재조립되는 과정을 거친다.
TCP/IP는 이러한 패킷통신을 위한 통신 규약이다
TCP가 나누어진 패킷들을 보다 안전하게 순차적으로 조립되도록 한다면, IP는 패킷들이 빠르고, 정확하게 목적지에 도달할 수 있게한다.

IP

IP란 인터넷 프로토콜의 약자로 각각의 호스트들이 네트워크 상에서 통신을 하기 위한 규약이다. 즉, 송신호스트와 수신호스트가 패킷 교환 네트워크에서 정보를 주고받는데 사용하는 규약이다.
컴퓨터의 경우 각 기업마다 운영체제가 다르고 사용하는 프로그램의 구현언어도 모두 다를 수 있다. 때문에 네트워크에서 각 호스트들이 통신하기 위해서는 공통된 통신 규약이 필요로 하게되었고 IP는 패킷의 전달을 위한 프로토콜이다.
이러한 IP는 비신뢰성과 비연결성을 기반으로한다. 때문에 전송한 정보가 제대로 도착하였는지를 보장하지 않는다. 다른 호스트로 정보를 보낼 때 정보는 패킷 단위로 나뉘어 전송되는데 이때 이 패킷이 손상될 수도 있고, 순서가 뒤바뀌어 전송될 수도 있다.패킷의 전송과 순서를 보장하기 위한 보완적인 규약이 TCP이다.

TCP

TCP(Transmission Control Protocol)는 다른 컴퓨터와 데이터 통신을 하기 위한 규약이다.
초기 패킷방식은 경로를 정해두지않고 목적지에 도달하도록하는 방식이므로 쪼개어진 일부 패킷이 유실될 위험과 지연의 문제점이 있었다. 또한 도달순서가 보장되지 않으므로 데이터의 신뢰성이 보장되지 않았다. 이러한 문제점을 해결하고자 등장한 것이 TCP이다.

TCP 의 작동은 크게 세가지 흐름으로 구분한다.

1. 연결 생성

연결을 생성하기 위해, 3방향 HandShake을 사용한다.
3 HandShake
TCP는 3 핸드쉐이크로 연결을 설정한다.

1) 클라이언트가 서버에게 SYN 메시지를 보낸다.(SYN)
2) 서버가 클라이언트에게 SYN-ACK 메시지로 응답한다 (SYN-ACK)
3) 2번에서 받은 메시지에 클라이언트가 서버에게 ACK 메시지를 보낸다. (ACK)

2. 자료전송

연결설정 후 데이터 송수신이 가능하다.
TCP는 흐름제어, 혼잡제어의 특징을 바탕으로 신뢰성을 보장한다.
데이터를 송수신시 계속 확인응답을 보내어 통신 상태를 확인하며 속도를 제어함으로서 흐름을 제어한다.(Sliding Window : 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법)
또한, 네트워크 회선의 과부하를 방지하기 위해 확인응답을 통해 데이터 송신량을 조절한다. 네트워크 혼잡이 의심된다면 과부하를 막기 위해 송신량을 조절하게 되는것이다.
이러한 방법들을 통해 사용자들이 네트워크 상황에 따라 속도를 조절할 수 있게 되었다.

3.연결종료

같이 알면 도움이 되는 용어들 #IBM_DOC

클라이언트

: 네트워크나 다른 호스트(컴퓨터)의 자원들을 액세스하는 컴퓨터 또는 프로세스.

호스트

: 인터넷 네트워크에 접속되고 다른 인터넷 호스트와 통신할 수 있는 컴퓨터를 말한다. 로컬호스트는 해당 사용자가 작업중인 컴퓨터를 가리키며 원격 호스트는 네트워크에 있는 임의의 다른 호스트 이름이다. 호스트는 패킷의 소스이며 대상이다.인터넷 네트워크에서 호스트는 이름과 주소로 식별된다.

패킷

:호스트와 네트워크 사이 정보 및 데이터 블록이다. 패킷은 인터넷 네트웤를 통해 데이터를 송수신하는 프로세스에 의해 사용되는 교환 미디어이다.

SYN Flooding 출처:doz님

TCP의 3 way handShake에서 공격자가 서버로 SYN을 계속보낼 경우 서버는 정상적인 클라이언트로 판단하여 응답하지만 클라이언트로 확인받았다는 ACK이 오지않는다면 SYC_RECV 상태의 세션이 계속 쌓이게 된다. 이러한 세션이 계속 쌓이면 SYN Backlog가 꽉차게되고 결국 SYN 소켓 정보를 받을 수 없어 SYN Drop이 발생하게 된다.
이를 해결하기 위해서는 세션을 쌓는 공간의 크기를 설정하여 SYC_RECV 상태의 소켓들을 좀 더 많이 쌓을 수 있도록하여 어느정도 수준의 Backlog를 버텨낼 수 있도록 하거나, SYC+ACK의 재전송 횟수를 지정하여 일정횟수 이상 응답이 없으면 소켓을 끊는것이다.

참고
IBM docs
위키백과 인터넷 프로토콜 스위트
나무위키
[doz님 브런치]((https://brunch.co.kr/@dreaminz/5)

profile
안녕하세요!

0개의 댓글