C_C++ 프로그래밍/TCP_IP
-
[TCP/IP] 소켓 옵션을 사용해보자 (슬라이딩 윈도우 제어)C_C++ 프로그래밍/TCP_IP 2019. 6. 21. 01:59
로재의 개발 일기 슬라이딩 윈도우가 뭔데요? 간단히 말해서 데이터를 전송하기 위한 가상의 공간을 말하며이는 데이터 전송 및 수신에 큰 영향을 미칩니다.내부적으로는 여러가지 일들이 돌아가고 좀 더 복잡하죠. 혹시 필요하시면 슬라이딩 윈도우에 관해서 쓴 글을 참고하시면 좋을 거 같습니다. 슬라이딩 윈도우란?? 파일 전송? 위에서 슬라이딩 윈도우를 조절하면 데이터 전송에 상당한 영향을 끼친다고 말했습니다.하지만, 확실하게 예제를 통해서 육안으로 확인을 해보면 좋겠다.. 라는 생각이 들어서파일 전송 프로그램을 사용하여, 걸리는 시간을 확인해봤습니다. (미구현) 추가적으로 걸리는 시간 출력도 구현하면 좋겠다는 생각이 드네요. 혹시 적당한 파일이 없으신 분들은 매우 큰 텍스트 파일 만들기 위 글을 참고하시면 좋을 ..
-
[C/C++] [TCP Sliding window] [슬라이딩 윈도우 개념] 슬라이딩 윈도우란?C_C++ 프로그래밍/TCP_IP 2019. 6. 18. 20:23
로재의 개발 일기 MSS? TCP에서는 전송 데이터에 대한 응답(ACK)를 사용합니다.이를 통해서 안전한 데이터의 송수신을 보장이 가능하게 됩니다.TCP는 한번에 전송이 가능한 최대 세그먼트 크기 (TCP MSS)가 정해져 있는데요.이는 MTU와는 다른 개념이며, MSS는 이보다 작은 크기를 가집니다.MTU : 한번에 보낼 수 있는 패킷의 크기 MSS : TCP의 최대 세그먼트 크기 예를 들어 봅시다.MSS가 1KB이고, 10KB의 데이터를 전송한다면데이터는 10개의 패킷으로 나뉘어서 송신이 되게 됩니다.이때 통신의 신뢰를 확보하기 위해서 10번의 ACK가 필요하게 됩니다.즉, ACK를 기다리고 있는 Client의 시간이 낭비되고 있는 것입니다. 이는 비효율적이고 빠른 데이터 송수신을 위해서는 느리지 않..
-
[TCP/IP] [epoll] epoll을 사용한 소켓 프로그래밍 예제C_C++ 프로그래밍/TCP_IP 2019. 6. 10. 20:52
로재의 개발 일기 epoll (사건 기반 파일 처리) epoll을 사용하여 server가 모든 클라이언트의 입력을 일일이 반복문을 순회하면서 검사하지 않고사건이 발생한 파일 디스크립터만 검사하도록 하였습니다. epoll이란? -> https://redcoder.tistory.com/123 클라이언트는 select와 fd_set 함수들을 사용하였고이에 대한 정보를 가까운 시일 내에 정리해서 올리겠습니다. Server.c1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586..
-
Blocking, Unblocking 봉쇄/비봉쇄 통신C_C++ 프로그래밍/TCP_IP 2019. 6. 6. 22:09
로재의 개발 일기 Blocking I/O를 직접 user level에서 작업이 불가능하다.이를 커널 장치에서 설정을 할 수 있으며일반적인 프로그래밍에서 별도의 작업이 없다면 봉쇄 통신을 사용하여 통신을 한다. 일반적으로 생각하는 server의 역할에서 client의 수신을 기다리는 동안 다른 작업을 하지 못하는 행위를 예시로 들 수 있다.생각해보면 자원 낭비가 일어나는 것이다. Unblocking 비봉쇄 통신을 사용하여 통신을 한다.read()를 예시로 들면, 프로세스가 입력을 기다리는 동안 다른 작업을 할 수 있도록 처리를 한다.이때 입력이 없는 상태에서 특별한 오류가 없다면 정상적인 return 처리를 해주고특정 오류가 발생 시, err 처리를 해준다. 이를 소켓에 적용하기 위해서 fcntl() 함수..
-
멀티쓰레드를 이용한 소켓 통신C_C++ 프로그래밍/TCP_IP 2019. 6. 4. 21:30
개발 환경 OS Ubuntu 18.04.2 컴파일러 gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04) 서버 측에 pthread를 사용하여 1개가 아닌 여러 클라이언트의 접속이 가능하도록 하였고 현재 방문자의 수가 몇 명인지 체크하도록 하였다. 이때 방문자 수는 서로 다른 Thread가 공동으로 접근 할 수 있기 때문에 Mutex를 사용하여 관리 하도록 하였다. thread를 통해서 client의 정보를 전달하기 위해서는 서버와 accept를 통해서 나온 client의 접근 지정자를 void 형식으로 캐스팅하여 인자로 보내주면 된다. 앞으로 추가 사항 이후에 클라이언트가 채팅한 내용을 서버에서 각각의 클라이언트들에게 뿌려주는 기능과 파일 전송을 추가할 계획이다. 소스코드..
-
[TCP/IP] [OOB] OOB 통신에 대해서 알아보자C_C++ 프로그래밍/TCP_IP 2019. 6. 4. 20:29
개발 환경 OS Ubuntu 18.04.2 컴파일러 gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04) OOB란출처 : 정보통신기술용어해설 대역외 발사 (Out-of-band Emission, OOB) ㅇ 변조의 결과로써 생기는 필요주파수대역 바로 바깥쪽에 있는 1 이상의 불요발사 - 이에는 스퓨리어스 발사를 포함하지 않음 . 즉, 기본파 주위에 인접하여 발생하는 것OOB = Out of Band라는 의미로 대역 외의 발사를 의미합니다.우리가 보내는 데이터들은 대부분 In of Band 방식으로 대역폭 내에 있기 때문에 우선순위가 특별히 존재하지 않습니다.하지만 우리가 긴급하게 데이터를 보내고자 할 때즉 우선 순위 통신을 하고자 할 때, OOB 통신을 사용합니다.또한, ..
-
1:1 TCP 소켓 통신 프로그램C_C++ 프로그래밍/TCP_IP 2019. 5. 21. 23:00
간단하게 1:1 TCP 소켓 통신을 하는 프로그램을 만들었다.사실 echo 프로그램에 조금 더 추가를 하여작성한 코드에 무한 반복문을 돌린 것이지만하면서 더더욱 익숙해질 것 같다. Server Client 12345678910$ ./server 8918 새로운 클라이언트 전속 IP : 127.0.0.1 IP : 127.0.0.1 : hi IP : 127.0.0.1 : man IP : 127.0.0.1 : Welcome cs 12345678910$ ./client hiServer : SUCCESS manServer : SUCCESS WelcomeServer : SUCCESS cs Server.c 12345678910111213141516171819202122232425262728293031323334353..
-
[struct rlimit] setrlimit, getrlimit...C_C++ 프로그래밍/TCP_IP 2019. 5. 20. 22:56
프로그램에 할당된 파일의 수, soft limit의 값그리고 그것을 설정 가능한 최대 값인 hard limit 값 등등..을 설정할 수 있다. 직접 해보던 중 구글링을 해봤더니이해가 잘 되는 답변이 있어서 예제와 출처로 남긴다 결과적으로 말하면 rlim_cur 값을 X로 지정하고무한루프를 돌리면 X초 이후로 CPU Time Out이 발생한다. https://www.go4expert.com/articles/getrlimit-setrlimit-control-resources-t27477/ rlimit의 구조 123456struct rlimit{ rlim_t rlim_cur; /* soft limit */ rlim_t rlim_max; /* Hard limit */ }; Colored by Color Scri..